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?