¿Cómo soluciono los problemas de DynamoDB Streams en mis funciones de Lambda?
Quiero usar Amazon DynamoDB Streams con mis funciones de AWS Lambda o solucionar problemas relacionados.
Resolución
A continuación, se incluyen preguntas frecuentes sobre el uso de DynamoDB Streams con una función de Lambda:
¿Por qué mi función de Lambda no se escala cuando la secuencia de DynamoDB es un desencadenador?
Al activar una secuencia de DynamoDB en una tabla de DynamoDB, Amazon DynamoDB asocia un fragmento para cada partición. Por ejemplo, si la tabla de DynamoDB tiene 10 particiones y activa DynamoDB Streams en esta tabla, tendrá 10 fragmentos.
Si el número de particiones de la tabla aumenta, también aumenta el número de fragmentos de la secuencia.
Cada partición de una tabla de DynamoDB puede gestionar hasta 3000 unidades de capacidad de lectura (RCU), 1000 unidades de capacidad de escritura (WCU) y 10 GB de datos. Si se supera alguno de estos parámetros, se produce lo siguiente:
- La adición de una nueva partición a la tabla.
- La creación de un nuevo fragmento en la secuencia de DynamoDB.
¿Cómo puedo controlar el procesamiento de datos desde la secuencia de DynamoDB?
El tamaño del lote y el intervalo del lote ayudan a controlar el procesamiento de datos de la secuencia.
Intervalo del lote: establece cuánto tiempo se debe esperar a los registros antes de invocarlos. El intervalo del lote permite controlar el procesamiento de datos desde la secuencia de DynamoDB. Tenga en cuenta que este comportamiento depende de la disponibilidad de datos dentro de la secuencia.
Tamaño del lote: establece el número máximo de registros del lote.
La función de Lambda no se invoca hasta que se cumplan las siguientes condiciones:
- El tamaño de la carga útil alcanza los 6 MB (límite de invocación sincrónica).
- El intervalo del lote alcanza su valor máximo (60 segundos, en este ejemplo).
- El tamaño del lote alcanza su valor máximo.
¿Cómo se usa el factor de paralelización para acelerar el procesamiento de datos?
El factor de paralelización procesa grandes cantidades de registros rápidamente al permitir más ejecuciones simultáneas. Puede configurar el factor de paralelización (valor predeterminado: 1 hasta 10) para aumentar el número de fragmentos que se procesan. Cuando active el factor de paralelización, asegúrese de utilizar claves de partición aleatorias o únicas para lograr el mayor rendimiento.
Cálculo: Factor de paralelización (lotes simultáneos por fragmento) * Fragmentos = Ejecución simultánea
¿Qué es la configuración BisectBatchonFunctionError?
Si se produce un error en la función de Lambda, los lotes se dividen en dos cuando la opción BisectBatchonFunctionError se establece en true. Los lotes divididos se vuelven a intentar hasta que se encuentre el registro del problema. Los reintentos se procesan en función de las configuraciones de número máximo de reintentos y antigüedad del registro.
Si la opción Reintentos está establecida en 0, no se intentará reintentar el registro con errores. En este caso, DynamoDB Streams descarta los registros con errores o los envía a una cola de mensajes fallidos (DLQ), si está configurada.
Ejemplo 1
En el siguiente ejemplo, «p» representa el registro del problema y los reintentos están establecidos en 0.
Registro del lote: [1,2,3p,4,5p]
División 1: [3p,4,5p]
División 2: [3p] [4,5p] El reintento descarta [3p] porque se identifica como el registro del problema. O bien, se envía a la DLQ, si está configurada.
División 3: [4] se procesa, [5p] se descarta o se envía a la DLQ, si está configurada.
Ejemplo 2
En el ejemplo siguiente, «x» representa el registro del problema. Los reintentos están establecidos en -1.
Registros de lotes insertados: [1,2,3x,4,5x]
[3x,4,5x]
[3x,4,5x]
[3x,4,5x]
[3x,4,5x]
¿Por qué aumenta el valor de IteratorAge en Lambda en mi secuencia de DynamoDB?
A continuación, se indican las razones más comunes por las que aumenta el valor de IteratorAge en Lambda:
- Hay un registro incorrecto en la secuencia de DynamoDB.
- Hay un gran volumen de operaciones de escritura (PutItem para BatchWriteItem) en la secuencia. Es posible que la función de Lambda no pueda seguir el ritmo del procesamiento de un volumen de escritura elevado. Si esto ocurre, aumente la capacidad aprovisionada de la tabla de DynamoDB para aumentar el recuento de particiones por cada 1000 WCU. El aumento de la capacidad aprovisionada aumenta el número de ejecuciones de Lambda simultáneas. Para obtener más información, consulte la sección anterior ¿Por qué mi función de Lambda no se escala cuando la secuencia de DynamoDB es un desencadenador?
- Se produjo una disminución en el número de particiones de DynamoDB, por ejemplo, al migrar a una cuenta nueva o a una tabla nueva.
- Hay errores de limitación o de función en la función de Lambda. AWS Lambda vuelve reintenta los registros hasta que todo el lote se procese correctamente o hasta que caduque la antigüedad del registro. Además, el periodo de retención de DynamoDB Streams es de 24 horas. Para evitar la pérdida de datos, se recomienda configurar la DLQ. Si la DLQ está configurada, AWS Lambda envía los lotes de registros con errores a la DLQ una vez finalizados los reintentos o cuando caduque la antigüedad del registro.
Para resolver los errores de la función de Lambda, consulte Registros de Amazon CloudWatch para obtener más información sobre el error. - Hay un aumento en la duración de la función de Lambda.
- Debe optimizar la gestión de errores y el factor de paralelización.
Para obtener información detallada, consulte ¿Por qué aumenta la métrica IteratorAge de Lambda y cómo la reduzco?
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 6 meses
- OFICIAL DE AWSActualizada hace 5 meses