Ir para o conteúdo

Como eu soluciono o erro "Signature expired" quando uso um AWS SDK para invocar uma função do Lambda?

3 minuto de leitura
0

Ao usar um AWS SDK para invocar minha função do AWS Lambda, a função retorna um erro "Signature expired".

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: 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 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 AWS SDK 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 coloca a solicitação em fila localmente até que haja uma conexão disponível. Se você receber o erro "Signature expired" 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 alta e a invocação é executada por um período estendido.

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 expira. 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.

Também é possível usar o Top Level Await (TLA) na sua aplicação. Use o TLA ao fazer chamadas de API fora de um manipulador e receber exceções SignatureDoesNotMatch ao usar o 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, depuração e solução de problemas das funções do Lambda

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

Como uso o CloudWatch Logs para saber se minha função do Lambda atingiu o tempo limite?

AWS OFICIALAtualizada há 6 meses