¿Cuándo sucede cuando alcanzo el máximo de funciones Lambda concurrentes?

¿Cuándo sucede cuando alcanzo el máximo de funciones Lambda concurrentes?

Tengo 200 archivos jsonl (json-lines) en un depósito s3. Cada archivo contiene 100.000 JSON que se escribirán en DynamoDB.

Quiero usar Lambda para descargar el archivo de S3 y escribirlo por lotes en DynamoDB (los archivos ya coinciden perfectamente con el esquema de la tabla).

Tengo 200 archivos, pero no puedo llamar a 200 lambdas simultáneamente; dado que DynamoDB está limitado a solo 10 000 WCU por segundo, solo puedo escribir 10 000 filas por segundo. Y Lambda solo puede durar 300 segundos, antes de que se agote el tiempo de espera.

¿Cuál es la mejor manera de hacer esto?

Mi pensamiento actual era llamar de forma asincrónica a 5 Lambdas a la vez y monitorear los archivos de registro para ver cuántos están terminados, llamando al siguiente, solo después de que uno esté completo.

O...

¿Puedo configurar ellímite de ejecución concurrentea 5 para la función lambda y luego llamar asicariamente a la función 200 veces (una para cada archivo)? ¿AWS activará automáticamente la siguiente lambda cuando esté completa?

Respuesta1

De los documentos de Amazon:

https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html

Al establecer un límite de concurrencia en una función, Lambda garantiza que la asignación se aplicará específicamente a esa función, independientemente de la cantidad de funciones restantes de procesamiento de tráfico. Si se excede ese límite, la función se limitará. El comportamiento de esa función cuando se acelera dependerá del origen del evento. Para obtener más información, consulte Comportamiento de limitación.

Luego, de los documentos de AWS que tratan sobre el comportamiento de limitación: https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html#throttling-behavior

Al alcanzar el límite de concurrencia asociado con una función, cualquier solicitud de invocación adicional a esa función se limita, es decir, la invocación no ejecuta su función. Cada invocación limitada aumenta la métrica de Amazon CloudWatch Throttles para la función. AWS Lambda maneja las solicitudes de invocación limitadas de manera diferente, según su origen:

Invocación sincrónica: si la función se invoca sincrónicamente y se limita, Lambda devuelve un error 429 y el servicio que invoca es responsable de los reintentos. El código de error ThrottledReason explica si se encontró con un límite de nivel de función (si se especifica) o un límite de nivel de cuenta (consulte la nota a continuación). Cada servicio puede tener su propia política de reintento. Por ejemplo, CloudWatch Logs reintenta el lote fallido hasta cinco veces con retrasos entre los reintentos. Para obtener una lista de orígenes de eventos y su tipo de invocación, consulte Orígenes de eventos admitidos.

Invocación asincrónica: si su función Lambda se invoca de forma asincrónica y se limita, AWS Lambda reintenta automáticamente el evento limitado durante un máximo de seis horas, con retrasos entre los reintentos. Recuerde, los eventos asincrónicos se ponen en cola antes de usarse para invocar la función Lambda.

Entonces, parece que si establece un límite concurrente (el valor predeterminado es 1000 en todas sus funciones), entonces AWS le dará un código de estado 429 (para solicitud-respuesta) o automáticamente consultará y reintentará su función hasta por 6 horas.

Sin embargo, no especifica cómo funciona la función de retraso entre reintentos.

información relacionada