Quando acontece quando eu alcanço o máximo de funções Lambda simultâneas

Quando acontece quando eu alcanço o máximo de funções Lambda simultâneas

Tenho 200 arquivos jsonl (json-lines) em um bucket s3. Cada arquivo contém 100.000 JSONs para serem gravados em um DynamoDB.

Quero usar o Lambda para baixar o arquivo do S3 e gravá-lo em lote no DynamoDB (os arquivos já correspondem perfeitamente ao esquema da tabela).

Tenho 200 arquivos, mas não posso chamar 200 lambdas simultaneamente – como o DynamoDB é limitado a apenas 10.000 WCUs por segundo, só posso escrever 10.000 linhas por segundo. E o Lambda só pode durar 300 segundos, antes de expirar.

Qual é a melhor forma de fazer isso?

Meu pensamento atual era chamar de forma assíncrona 5 Lambdas de uma vez e monitorar os arquivos de log para ver quantos foram concluídos, chamando o próximo, somente depois que um for concluído?

OU...

Posso definir olimite de execução simultâneapara 5 para a função lambda e, em seguida, chamar a função de forma assíncrona 200 vezes (uma para cada arquivo)? A AWS acionará automaticamente o próximo lambda quando ele for concluído?

Responder1

Do Amazon Docs:

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

Ao definir um limite de simultaneidade em uma função, o Lambda garante que a alocação será aplicada especificamente a essa função, independentemente da quantidade de tráfego de processamento das funções restantes. Se esse limite for excedido, a função será acelerada. O comportamento dessa função quando limitada dependerá da origem do evento. Para obter mais informações, consulte Comportamento de limitação

Em seguida, nos documentos da AWS que tratam do comportamento de limitação: https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html#throttling-behavior

Ao atingir o limite de simultaneidade associado a uma função, quaisquer solicitações de invocação adicionais para essa função serão limitadas, ou seja, a invocação não executa sua função. Cada invocação limitada aumenta a métrica de Limitações do Amazon CloudWatch para a função. O AWS Lambda lida com solicitações de invocação limitadas de maneira diferente, dependendo da origem:

Invocação síncrona: se a função for invocada de forma síncrona e limitada, o Lambda retornará um erro 429 e o serviço invocador será responsável pelas novas tentativas. O código de erro ThrottledReason explica se você encontrou uma limitação em nível de função (se especificada) ou uma limitação em nível de conta (veja a observação abaixo). Cada serviço pode ter sua própria política de novas tentativas. Por exemplo, o CloudWatch Logs tenta novamente o lote com falha até cinco vezes com atrasos entre as tentativas. Para obter uma lista de fontes de eventos e seus tipos de invocação, consulte Fontes de Eventos Suportadas.

Invocação assíncrona: se a função do Lambda for invocada de forma assíncrona e limitada, o AWS Lambda tentará novamente automaticamente o evento limitado por até seis horas, com atrasos entre as tentativas. Lembre-se de que os eventos assíncronos são enfileirados antes de serem usados ​​para invocar a função Lambda.

Portanto, parece que se você definir um limite simultâneo (o padrão é 1000 definido em todas as suas funções), a AWS fornecerá um código de status 429 (para resposta à solicitação) ou fará uma consulta automática e tentará novamente sua função por até 6 horas.

Porém, ele não especifica como funciona a função de atraso entre novas tentativas.

informação relacionada