Como posso resolver o erro “native lambda error:InvalidSignatureException: Assinatura expirada” quando uso um SDK da AWS para invocar uma função do Lambda?

3 minuto de leitura
0

Ao usar um SDK da AWS para invocar minha função do AWS Lambda, a função retorna um erro “Assinatura expirada”.

Breve descrição

Quando o horário do cliente e o horário do servidor não coincidem, a assinatura do Lambda expira e você recebe uma mensagem de erro semelhante à seguinte:

“Error: native lambda error:InvalidSignatureException: Assinatura expirada: 20230118T161739Z é anterior a 20230118T161739Z (20190318T162239Z - 5 min.)”

Uma solicitação de API deve chegar à AWS em até cinco minutos após o carimbo de data/hora na solicitação, ou a AWS negará a solicitação. Em alguns cenários, é possível alterar o horário do cliente, para que ele coincida com o horário do servidor.

Resolução

Ao usar um SDK da AWS para invocar sincronicamente uma função do Lambda, a conexão dura até que a resposta seja retornada. Por padrão, o SDK do Node.js aceita 50 conexões. Se a cota de conexão for atingida, o SDK enfileirará a solicitação localmente até que haja uma conexão disponível. Se você receber o erro “Assinatura expirada” e as seguintes ações forem verdadeiras, então a cota de conexão pode ter sido atingida:

  • A utilização da função do Lambda não está sendo controlada.
  • O horário do cliente está correto.
  • (Somente SDK do Node.js) Você definiu a opção correctClockSkew:true ao criar o cliente, para corrigir o horário ao invocar a função.
  • Você invocou a função do Lambda em uma taxa elevada ou invocou a função do Lambda em uma taxa elevada e a invocação é executada por um longo período.

O SDK assina a solicitação e a coloca em uma fila. Se a fila ficar muito extensa e a solicitação ficar pendente por mais de 5 minutos, a assinatura expirará. Consequentemente, todas as solicitações adicionais apresentam falha.

Se você não precisar da resposta da invocação, use a invocação assíncrona. A invocação assíncrona permite que o SDK use a conexão somente para invocar a solicitação e não espere por uma resposta.

Outra opção é usar o Top Level Await (TLA) na aplicação. Use o TLA ao fazer chamadas de API fora de um manipulador e receber exceções SignatureDoesNotMatch ao usar AWS SDK v3 do Node.js.

Ou aumente o número máximo de conexões que o SDK permite.

Observação: ao adicionar conexões, a função do Lambda é invocada em uma taxa mais elevada e pode levar ao controle de utilizaçã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á 5 meses