Como posso resolver o erro “native lambda error:InvalidSignatureException: Signature expired” ao invocar uma função do Lambda usando um SDK da AWS?

3 minuto de leitura
0

Quando eu invoco minha função do AWS Lambda usando um SDK da AWS, a função retorna um erro de assinatura expirada.

Breve descrição

As assinaturas expiradas do Lambda ocorrem quando a hora do cliente e a hora do servidor não coincidem, de forma semelhante ao seguinte erro:

"Error: native lambda error:InvalidSignatureException: Signature expired: 20230118T161739Z is now earlier than 20230118T161739Z (20190318T162239Z - 5 min.)"

Uma solicitação de API deve chegar à AWS em até cinco minutos após a data e hora na solicitação, ou a AWS negará a solicitação. Em alguns cenários, esse problema não pode ser corrigido alterando a hora do cliente para corresponder à hora do servidor.

Resolução

Ao invocar uma função do Lambda de forma síncrona usando um SDK da AWS, a conexão dura até que a resposta seja retornada. O SDK do Node.js permite 50 conexões por padrão. Se o limite de conexão for atingido, o SDK enfileirará a solicitação localmente até que haja uma conexão disponível. O limite de conexão pode ser atingido se você receber o erro de vencimento da assinatura, e as seguintes ações também são verdadeiras:

  • A função do Lambda não está sendo controlada.
  • O horário do cliente está correto.
  • (Somente SDK Node.js) A opção correctClockSkew:true foi definida ao criar o cliente para garantir que a hora seja corrigida ao invocar.
  • A função do Lambda é invocada em alta taxa e é executada por um longo período de tempo.
  • A função do Lambda é invocada em alta taxa.

O SDK assina a solicitação e a coloca em uma fila enquanto aguarda uma conexão disponível. Se a fila ficar muito grande e a solicitação ficar pendente por mais de cinco minutos, a assinatura expirará. Qualquer solicitação adicional falhará porque a assinatura expirou.

Para resolver esse problema, considere usar a invocação assíncrona para o Lambda se a resposta da invocação não for necessária. Isso permite que o SDK use a conexão somente para invocar a solicitação e não espere por uma resposta.

Você também pode aumentar o número máximo de conexões permitidas pelo SDK.

Observação: conexões adicionais permitem que a função do Lambda seja invocada em uma taxa mais alta, o que pode causar limitação.

Informações relacionadas

Monitoramento e solução de problemas de aplicativos Lambda

Como soluciono erros de tempo limite de invocação da função do Lambda?

Como determino se minha função do Lambda está expirando?

AWS OFICIAL
AWS OFICIALAtualizada há um ano