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?