Práticas recomendadas de uso do DynamoDB Streams com o Lambda
Uma função do AWS Lambda é executada em um contêiner, um ambiente de execução isolado de outras funções. Quando você executa uma função pela primeira vez, o AWS Lambda cria um novo contêiner e começa a executar o código da função.
Uma função do Lambda tem um manipulador que é executado uma vez por invocação. O manipulador contém a lógica de negócios principal da função. Por exemplo, a função do Lambda mostrada em Etapa 4: criar e testar uma função do Lambda tem um identificador que pode processar registros em um fluxo do DynamoDB.
Você também pode fornecer o código de inicialização que é executado apenas uma vez: depois que o contêiner é criado, mas antes que o AWS Lambda execute o manipulador pela primeira vez. A função do Lambda mostrada em Etapa 4: criar e testar uma função do Lambda possui um código de inicialização que importa o SDK for JavaScript in Node.js e cria um cliente para o Amazon SNS. Esses objetos devem ser definidos somente uma vez, fora do manipulador.
Depois da execução da função, o AWS Lambda pode optar por reutilizar o contêiner para invocações subsequentes da função. Neste caso, o manipulador da função pode reutilizar os recursos que você definiu no seu código de inicialização. (Você não pode controlar por quanto tempo o AWS Lambda reterá o contêiner, ou se o contêiner será reutilizado.)
Para acionadores do DynamoDB que usam o AWS Lambda, recomendamos o seguinte:
-
AWSOs clientes de serviço da devem ser instanciados no código de inicialização, e não no manipulador. Isso permite que o AWS Lambda reutilize conexões existentes, durante o ciclo de vida do contêiner.
-
Em geral, você não precisa gerenciar explicitamente as conexões ou implementar o pool de conexões porque o AWS Lambda gerencia isso para você.
Um consumidor do Lambda para um fluxo do DynamoDB fornece entrega pelo menos uma vez: ele não garante entrega exatamente uma vez e pode processar o mesmo registro mais de uma vez (por exemplo, quando a invocação de uma função é repetida). Isso é diferente da garantia do DynamoDB Streams de que cada registro do fluxo aparece exatamente uma vez no fluxo. Essa garantia descreve os registros armazenados no fluxo, e não o número de vezes que um consumidor os processa. Para evitar problemas inesperados decorrentes do processamento duplicado, certifique-se de que o código da função do Lambda seja idempotente.
Para obter mais informações, consulte Práticas recomendadas para trabalhar com funções do AWS Lambda no Guia do desenvolvedor do AWS Lambda.