¿Cómo resuelvo el error «error nativo de lambda:InvalidSignatureException: Firma caducada» al invocar una función de Lambda con un SDK de AWS?

3 minutos de lectura
0

Cuando invoco mi función de AWS Lambda mediante un SDK de AWS, la función devuelve un error de firma caducada.

Descripción breve

Las firmas caducadas de Lambda se producen cuando la hora del cliente y la hora del servidor no coinciden, de forma similar al siguiente error:

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

La solicitud de API debe llegar a AWS en un plazo de cinco minutos a partir de la marca de tiempo que figura en ella; de lo contrario, AWS la deniega. En algunos casos, este problema no se puede corregir cambiando la hora del cliente para que coincida con la hora del servidor.

Solución

Al invocar una función de Lambda de forma síncrona mediante un SDK de AWS, la conexión dura hasta que se devuelve la respuesta. El SDK de Node.js permite 50 conexiones de forma predeterminada. Si se alcanza el límite de conexión, el SDK pone la solicitud en cola localmente hasta que haya una conexión disponible. Es posible que se alcance el límite de conexión si recibe el error de firma caducada y también se realizan las siguientes acciones:

  • La función Lambda no está limitada.
  • La hora del cliente es correcta.
  • (Solo el SDK de Node.js) La opción correctClockSkew:true se configuró al crear el cliente para garantizar la corrección de la hora al invocar.
  • La función de Lambda se invoca a un ritmo elevado y se ejecuta durante un período de tiempo prolongado.
  • La función de Lambda se invoca a un ritmo elevado.

El SDK firma la solicitud y, a continuación, la coloca en una cola a la espera de una conexión disponible. Si la cola crece demasiado y la solicitud permanece pendiente durante más de cinco minutos, la firma caduca. Las solicitudes adicionales fallan porque la firma ha caducado.

Para resolver este problema, considere la posibilidad de utilizar una invocación asíncrona para Lambda si no se necesita la respuesta de la invocación. Esto permite que el SDK utilice la conexión solo para invocar la solicitud y no esperará a recibir una respuesta.

También puede aumentar el número máximo de conexiones que permite el SDK.

Nota: Las conexiones adicionales permiten que la función de Lambda se invoque a una velocidad mayor, lo que podría provocar una limitación.

Información relacionada

Supervisión y solución de problemas de funciones de Lambda

¿Cómo soluciono los errores de tiempo de espera de invocación de la función de Lambda?

¿Cómo puedo determinar si mi función de Lambda está agotando el tiempo de espera?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año