Como faço para tornar minha função do Lambda idempotente?

3 minuto de leitura
0

Quero tornar meu código de função do AWS Lambda idempotente para evitar inconsistências e perda de dados na minha aplicação.

Breve descrição

Na programação, idempotência se refere à capacidade de uma aplicação ou componente identificar eventos repetidos e evitar dados duplicados, inconsistentes ou perdidos. Tornar sua função do AWS Lambda idempotente exige projetar sua lógica de função para tratar eventos duplicados corretamente.

A lógica de função idempotente pode ajudar a reduzir os seguintes problemas:

  • Chamadas de API desnecessárias
  • Tempo de processamento do código
  • Inconsistência de dados
  • Aceleradores
  • Latência

Resolução

Para tornar sua função idempotente, o código da função deve validar adequadamente os eventos de entrada e identificar se os eventos foram processados antes. A funcionalidade da sua aplicação determina a melhor maneira de escrever o código.

Use o exemplo a seguir de lógica de funções e melhores práticas como orientação.

Exemplo de lógica de função do Lambda idempotente

Observação: o exemplo a seguir da lógica da função do Lambda se aplica à maioria dos casos de uso.

1.Extraia o valor de um atributo exclusivo do evento de entrada. (Por exemplo, um ID de transação ou compra.)

2.Verifique se o valor do atributo existe em um banco de dados de controle. (Por exemplo, uma tabela do Amazon DynamoDB.)

3.Dependendo dos resultados, realize a seguinte etapa:
Se existir um valor exclusivo, finalize a ação sem produzir um erro.

-ou-

Se um valor exclusivo não existir, continue com a ação que você projetou originalmente.

Observação: adicionar serviços da AWS à sua arquitetura pode gerar custos adicionais. Para obter mais informações, consulte a definição de preço do Amazon DynamoDB e a definição de preço da AWS.

4.Se o valor exclusivo não existir após a conclusão do trabalho da função, inclua o registro no banco de dados de controle.

5.Conclua a ação.
Observação: se você usa runtimes Java ou Python para sua função, revise os módulos de idempotência de Python e Java na página do AWS Lambda Powertools no GitHub.

Melhores práticas de idempotência da função do Lambda

  • Planeje seus recursos de idempotência antes de desenvolver sua aplicação.
  • Quando seu código do Lambda processa um evento duplicado, certifique-se de que ele termine sem produzir um erro.
    Observação: o lançamento de erros pode causar novas tentativas, seja pelo Lambda ou por outro serviço que invoca sua função.
  • Altere a configuração de tempo limite da função do Lambda para que todo o runtime seja tratado corretamente.
    Observação: usar um serviço separado para manter os dados e controlar eventos duplicados pode exigir chamadas de API para endpoints HTTPS. As chamadas de API para endpoints HTTPS podem, então, exigir mais runtime do que os três segundos padrão.
  • Teste e otimize sua função o máximo possível. Simule um cenário real e uma taxa de solicitações.
    Observação: é fundamental testar e otimizar a lógica da função idempotente para ajudar a evitar possíveis efeitos colaterais, como tempos limite, latência excessiva ou gargalos.
  • Armazene os dados da sessão usando um serviço que é facilmente escalável e oferece alta taxa de transferência, como o DynamoDB.

Observação: ao fazer chamadas de API para o Amazon Elastic Compute Cloud (Amazon EC2), o serviço oferece o parâmetro clientToken. Esse parâmetro garante que uma solicitação de API mutante conclua com êxito seu fluxo de trabalho somente uma vez, mesmo que você inicie várias tentativas com o mesmo clientToken.


Informações relacionadas

Lambda programming model

Criar uma função do Lambda com o console

Making retries safe with idempotent APIs

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos