내용으로 건너뛰기

AWS SDK를 사용하여 Lambda 함수를 호출할 때 발생하는 "native lambda error:InvalidSignatureException: 서명 만료됨" 오류를 해결하려면 어떻게 해야 합니까?

2분 분량
0

AWS SDK를 사용하여 AWS Lambda 함수를 호출할 때 함수에서 "서명 만료됨" 오류가 반환됩니다.

간략한 설명

클라이언트 시간과 서버 시간이 일치하지 않으면 Lambda 서명이 만료되고 다음과 비슷한 오류 메시지가 표시됩니다.

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

API 요청은 요청의 타임스탬프에서 5분 이내에 AWS에 도달해야 하며, 그렇지 않으면 AWS에서 요청을 거부합니다. 일부 시나리오에서는 서버 시간과 일치하도록 클라이언트 시간을 변경할 수 있습니다.

해결 방법

AWS SDK를 사용하여 Lambda 함수를 동기적으로 호출하면 응답이 반환될 때까지 연결이 지속됩니다. Node.js SDK는 기본적으로 50개의 연결을 허용합니다. 연결 할당량에 도달하면 SDK는 연결이 가능해질 때까지 요청을 로컬로 대기열에 보관합니다. "서명 만료됨" 오류가 표시되고 다음 상황에 해당하면 연결 할당량 제한에 도달했을 수 있습니다.

  • Lambda 함수가 스로틀링되지 않습니다.
  • 클라이언트 시간이 정확합니다.
  • (Node.js SDK만 해당) 함수를 호출할 때 시간이 수정되도록 클라이언트를 생성할 때 correctClockSkew:true 옵션을 설정합니다.
  • Lambda 함수를 빠른 속도로 호출했거나, Lambda 함수를 빠른 속도로 호출했는데 호출이 장기간 실행됩니다.

SDK는 요청에 서명한 다음 요청을 대기열에 넣습니다. 대기열이 너무 커져 요청이 5분 이상 보류 중이면 서명이 만료됩니다. 서명이 만료되었으므로 추가 요청은 모두 실패합니다.

호출의 응답이 필요하지 않은 경우 비동기 호출을 사용하십시오. 비동기 호출을 사용하면 SDK가 요청을 호출할 때만 연결을 사용하고 응답을 기다리지 않습니다.

애플리케이션에서 최상위 대기(TLA)를 사용할 수도 있습니다. 핸들러 외부에서 API를 호출하고 Node.js AWS SDK v3를 사용할 때 SignatureDoesNotMatch 예외가 발생한 경우 TLA를 사용하십시오.

또는 SDK에서 허용하는 최대 연결 수를 늘리십시오.

참고: 연결을 추가하면 Lambda 함수가 더 빠른 속도로 호출되어 병목 현상이 발생할 수 있습니다.

관련 정보

Lambda 애플리케이션 모니터링 및 문제 해결

Lambda 함수 호출 시간 초과 오류를 해결하려면 어떻게 해야 합니까?

Lambda 함수가 시간 초과되었는지 확인하려면 어떻게 해야 합니까?

AWS 공식업데이트됨 일 년 전