Quando acontece quando alcanço máximas funções lambda simultâneas

2

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

Eu 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).

Eu tenho 200 arquivos, mas não posso chamar 200 lambdas simultaneamente - como o DynamoDB está limitado a apenas 10.000 WCU por segundo, só posso escrever 10.000 linhas por segundo. E a Lambda só pode durar 300 segundos, antes de terminar.

Qual é a melhor maneira 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 são feitos, chamando o próximo, somente após um ser concluído?

OR ...

Posso definir o limite de execução simultânea como 5 para a função lambda , e então chamar a função 200 vezes (uma para cada arquivo)? A AWS irá disparar automaticamente o próximo lambda quando este estiver completo?

    
por keithRozario 12.03.2018 / 07:03

1 resposta

1

Do Amazon Docs:

link

By setting a concurrency limit on a function, Lambda guarantees that allocation will be applied specifically to that function, regardless of the amount of traffic processing remaining functions. If that limit is exceeded, the function will be throttled. How that function behaves when throttled will depend on the event source. For more information, see Throttling Behavior

Então, a partir de documentos aws lidando com o comportamento de limitação: link

On reaching the concurrency limit associated with a function, any further invocation requests to that function are throttled, i.e. the invocation doesn't execute your function. Each throttled invocation increases the Amazon CloudWatch Throttles metric for the function. AWS Lambda handles throttled invocation requests differently, depending on their source:

Synchronous invocation: If the function is invoked synchronously and is throttled, Lambda returns a 429 error and the invoking service is responsible for retries. The ThrottledReason error code explains whether you ran into a function level throttle (if specified) or an account level throttle (see note below). Each service may have its own retry policy. For example, CloudWatch Logs retries the failed batch up to five times with delays between retries. For a list of event sources and their invocation type, see Supported Event Sources.

Asynchronous invocation: If your Lambda function is invoked asynchronously and is throttled, AWS Lambda automatically retries the throttled event for up to six hours, with delays between retries. Remember, asynchronous events are queued before they are used to invoke the Lambda function.

Portanto, se você definir um limite concorrente (o padrão é 1000 em todas as suas funções), a AWS fornecerá um código de status 429 (para solicitação-resposta) ou automaticamente e tentará novamente sua função para até 6 horas.

Ele não especifica como funciona a função de atraso entre novas tentativas.

    
por 14.03.2018 / 05:39