Lambda 함수 SnapStart 오류 문제 해결

Lambda 함수 SnapStart 오류 문제 해결 (Troubleshooting SnapStart errors for Lambda functions)

이 페이지는 Lambda SnapStart를 사용할 때 발생하는 흔한 문제(스냅샷 생성 오류, 타임아웃 오류, 내부 서비스 오류 포함)를 다뤄요.

출처: AWS Lambda 개발자 안내서

본문

SnapStartNotReadyException

오류: Invoke20150331 작업 호출 시 오류가 발생했습니다(SnapStartNotReadyException): Lambda가 함수를 초기화 중입니다. 함수 상태가 ACTIVE가 되면 호출할 준비가 됩니다.

흔한 원인: 이 오류는 Inactive 상태인 함수 버전을 호출하려 할 때 발생해요. 함수 버전은 14일 동안 호출되지 않았거나 Lambda가 실행 환경을 주기적으로 재활용할 때 Inactive가 돼요.

해결 방법: 함수 버전이 Active 상태에 도달할 때까지 기다렸다가 다시 호출하세요.

SnapStartTimeoutException

문제: SnapStart 함수 버전을 호출하려 할 때 SnapStartTimeoutException을 받아요.

흔한 원인: Restore 단계 동안 Lambda는 Java 런타임을 복원하고 after-restore 런타임 훅을 실행해요. after-restore 런타임 훅이 10초보다 오래 실행되면 Restore 단계가 타임아웃되고 함수 호출 시 오류가 발생해요. 네트워크 연결과 자격 증명 문제도 Restore 단계 타임아웃을 일으킬 수 있어요.

해결 방법: 함수의 CloudWatch 로그에서 Restore 단계 중 발생한 타임아웃 오류를 확인하세요. 모든 after-restore 훅이 10초 미만에 완료되도록 하세요.

예제 CloudWatch 로그

{ "cause": "Lambda couldn't restore the snapshot within the timeout limit. (Service: Lambda, Status Code: 408, Request ID: 11a222c3-410f-427c-ab22-931d6bcbf4f2)", "error": "Lambda.SnapStartTimeoutException"}

500 Internal Service Error

오류: 동시 스냅샷 생성 한도에 도달해 Lambda가 새 스냅샷을 만들 수 없었습니다.

흔한 원인: 500 오류는 함수나 코드의 문제라기보다 Lambda 서비스 자체의 내부 오류예요. 이런 오류는 간헐적인 경우가 많아요.

해결 방법: 함수 버전을 다시 게시해 보세요.

401 Unauthorized

오류: 잘못된 세션 토큰 또는 헤더 키

흔한 원인: 이 오류는 Lambda SnapStart와 함께 AWS Systems Manager Parameter Store 및 AWS Secrets Manager 확장을 사용할 때 발생해요. 함수가 SnapStart를 사용하면 컨테이너 엔드포인트에서 자격 증명을 얻고, Lambda는 AWS_SESSION_TOKEN 환경 변수를 설정하지 않아요. 함수가 그 환경 변수에서 X-Aws-Parameters-Secrets-Token 헤더를 설정하면 헤더가 비어 있어 확장이 요청을 거부해요.

해결 방법: 이 오류를 고치려면 AWS_SESSION_TOKEN 환경 변수를 직접 읽는 대신 AWS SDK 자격 증명 제공자 체인(credential provider chain)으로 세션 토큰을 가져오세요. X-Aws-Parameters-Secrets-Token 헤더를 제공자 체인이 반환한 토큰으로 설정하세요. 자격 증명 제공자 체인은 SnapStart를 포함한 모든 초기화 모드에서 올바른 세션 토큰을 반환해요.

UnknownHostException (Java)

오류: HTTP 요청을 실행할 수 없음: abc.us-east-1.amazonaws.com의 인증서가 subject alternative names 중 어떤 것과도 일치하지 않습니다.

흔한 원인: Lambda 함수는 이미 DNS 응답을 캐시해요. SnapStart와 함께 다른 DNS 캐시를 사용하면 함수가 스냅샷에서 재개될 때 연결 타임아웃을 겪을 수 있어요.

해결 방법: Java 11 런타임에서 UnknownHostException 실패를 방지하려면 networkaddress.cache.negative.ttl을 0으로 설정하는 것을 권장해요. Java 17 이상 런타임에서는 이 단계가 필요하지 않아요. 이 속성은 AWS_LAMBDA_JAVA_NETWORKADDRESS_CACHE_NEGATIVE_TTL=0 환경 변수로 Lambda 함수에 설정할 수 있어요.

스냅샷 생성 실패

오류: AWS Lambda가 SnapStart 함수를 호출할 수 없었습니다. 이 오류가 지속되면 함수의 CloudWatch 로그에서 초기화 오류를 확인하세요.

해결 방법: 함수의 Amazon CloudWatch 로그에서 before-checkpoint 런타임 훅 타임아웃을 검토하세요. 새 함수 버전을 게시해 볼 수도 있는데, 이렇게 하면 문제가 해결되기도 해요.

스냅샷 생성 지연

문제: 새 함수 버전을 게시할 때 함수가 오랫동안 Pending 상태로 남아 있어요.

흔한 원인: Lambda가 스냅샷을 만들 때 초기화 코드는 최대 15분까지 실행될 수 있어요. 시간 제한은 130초 또는 구성된 함수 타임아웃(최대 900초) 중 더 높은 값이에요. 함수가 VPC에 연결되어 있다면 Lambda는 함수가 Active가 되기 전에 네트워크 인터페이스를 만들어야 할 수도 있어요. 함수가 Pending 상태일 때 함수 버전을 호출하려 하면 409 ResourceConflictException이 발생할 수 있어요. 함수가 Amazon API Gateway 엔드포인트로 호출되면 API Gateway에서 500 오류가 발생할 수 있어요.

해결 방법: 호출하기 전에 함수 버전이 초기화되도록 최소 15분 기다리세요.

더 알아보기 (Learn more)