Lambda의 호출 문제 해결 - AWS Lambda

Lambda의 호출 문제 해결

Lambda 함수를 간접 호출하면 Lambda는 요청을 검증하고 이벤트를 함수로 전송하거나 비동기 간접 호출의 경우 이벤트 대기열로 보내기 전에 용량 확장을 확인합니다. 요청 파라미터, 이벤트 구조, 함수 설정, 사용자 권한, 리소스 권한 또는 한도와 관련된 문제로 인해 호출 오류가 발생할 수 있습니다.

함수를 직접 간접 호출하면 Lambda에서 보낸 응답에 간접 호출 오류가 표시됩니다. 이벤트 소스 매핑으로 또는 다른 서비스를 통해 함수를 비동기적으로 간접 호출하는 경우 로그, 배달 못한 편지 대기열 또는 실패한 이벤트 대상에 오류가 있을 수 있습니다. 오류 처리 옵션 및 재시도 동작은 함수를 간접 호출하는 방법과 오류 유형에 따라 다릅니다.

Invoke 작업이 반환할 수 있는 오류 유형 목록은 간접 호출을 참조하세요.

Lambda: Init 단계에서 함수 시간 초과(Sandbox.Timedout)

오류: 3.00초 후 작업 시간 초과

Init 단계가 시간 초과되면 Lambda는 다음 간접 호출 요청이 도착하면 Init 단계를 다시 실행하여 실행 환경을 다시 초기화합니다. 이를 억제된 초기화라고 합니다. 그러나 함수가 짧은 제한 시간(일반적으로 약 3초)으로 구성된 경우 할당된 제한 시간 동안 억제된 초기화가 완료되지 않아 Init 단계가 다시 시간 초과될 수 있습니다. 또는 억제된 초기화가 완료되지만 간접 호출 단계가 완료될 시간이 충분하지 않아 Invoke 단계가 시간 초과됩니다.

시간 초과 오류를 줄이려면 다음 전략을 하나 이상 사용하세요.

  • 함수 제한 시간 늘리기: 제한 시간을 연장하여 InitInvoke 단계가 성공적으로 완료될 수 있는 시간을 확보합니다.

  • 함수 메모리 할당 늘리기: 메모리가 많을수록 CPU 할당이 비례적으로 더 많아지므로 InitInvoke 단계 모두 빨라질 수 있습니다.

  • 함수 초기화 코드 최적화: 초기화에 필요한 시간을 줄여 구성된 시간 초과 내에 InitInvoke 단계가 완료될 수 있도록 합니다.

  • 오류 처리 추가: 함수 코드에서 적절한 오류 처리를 통해 Lambda 실행 환경이 실패하고 반복적인 초기화 시도가 트리거되는 것을 방지할 수 있습니다.

IAM: lambda:간접 호출Function 권한 없음

오류: 사용자: arn:aws:iam::123456789012:사용자/개발자가 수행할 권한이 없음: 리소스의 lambda:간접 호출Function: my-function

사용자 또는 수임하고자 하는 역할에는 함수를 간접 호출할 수 있는 권한이 있어야 합니다. 이 요구 사항은 Lambda 함수와 함수를 간접 호출하는 다른 컴퓨팅 리소스에도 적용됩니다. AWS 관리형 정책 AWSLambdaRole을 사용자에게 추가하거나, 대상 함수에서 lambda:InvokeFunction 작업을 허용하는 사용자 정의 정책을 추가하세요.

참고

IAM 작업의 이름(lambda:InvokeFunction)은 Invoke Lambda API 작업을 나타냅니다.

자세한 정보는 AWS Lambda에서 권한 관리을 참조하십시오.

Lambda: 유효한 부트스트랩을 찾을 수 없음(Runtime.InvalidEntrypoint)

오류: Couldn't find valid bootstrap(s): [/var/task/bootstrap /opt/bootstrap]

이 오류는 일반적으로 배포 패키지의 루트에 bootstrap 실행 파일이 없을 때 발생합니다. 예를 들어, .zip 파일이 포함된 provided.al2023 함수를 배포하는 경우 bootstrap 파일은 디렉터리가 아닌 .zip 파일의 루트에 있어야 합니다.

Lambda: ResourceConflictException 작업을 수행할 수 없음

오류: ResourceConflictException: 지금은 작업을 수행할 수 없음. 함수가 현재 보류 중 상태

함수를 만들 때 Virtual Private Cloud(VPC)에 함수를 연결하면 Lambda에서 탄력적 네트워크 인터페이스를 생성하는 동안 함수가 Pending 상태가 됩니다. 이 시간 동안에는 함수를 간접 호출하거나 수정할 수 없습니다. 함수를 만든 후 VPC에 함수를 연결하면 업데이트가 보류 중인 동안 함수를 간접 호출할 수 있지만 해당 코드 또는 구성을 수정할 수는 없습니다.

자세한 정보는 Lambda 함수 상태을 참조하십시오.

Lambda: 함수가 보류 상태에서 멈춰 있음

오류: 함수가 몇 분 동안 Pending 상태에서 멈춰 있습니다.

함수가 6분 이상 Pending 상태에서 멈춰 있는 경우 다음 API 작업 중 하나를 호출하여 차단을 해제합니다.

Lambda는 보류 중인 작업을 취소하고 함수를 Failed 상태로 전환합니다. 그런 다음 다른 업데이트를 시도할 수 있습니다.

Lambda: 하나의 함수가 모든 동시성을 사용함

문제: 한 함수가 사용 가능한 모든 동시성을 사용하여 다른 함수에 병목을 유발합니다.

AWS 리전에서 AWS 계정의 사용 가능한 동시성을 풀로 나누려면 예약된 동시성을 사용합니다. 예약된 동시성은 함수가 항상 할당된 동시성으로 확장할 수 있으며 할당된 동시성을 초과하여 확장되지 않도록 합니다.

일반: 다른 계정 또는 서비스로 함수를 간접 호출할 수 없음

문제: 함수를 직접 간접 호출할 수 있지만, 다른 서비스 또는 계정에서 간접 호출하는 경우 실행되지 않습니다.

기타 서비스 및 계정에 함수의 리소스 기반 정책에서 함수를 간접 호출할 수 있는 권한을 부여합니다. 간접 호출자가 다른 계정에 있는 경우, 해당 사용자도 함수를 간접 호출할 수 있는 권한이 있어야 합니다.

일반: 함수 호출이 반복됨

문제: 함수가 루프에서 계속 간접 호출됩니다.

이 문제는 일반적으로 함수가 해당 함수를 트리거하는 동일한 AWS 서비스의 리소스를 관리할 때 발생합니다. 예를 들어, 함수를 다시 간접 호출하는 알림으로 구성된 Amazon Simple Storage Service(Amazon S3) 버킷에 객체를 저장하는 함수를 생성할 수 있습니다. 함수 실행을 중지하려면 사용 가능한 동시성을 0으로 줄입니다. 이렇게 하면 향후 모든 간접 호출이 제한됩니다. 그런 다음 재귀 호출을 일으킨 코드 경로 또는 구성 오류를 파악합니다. Lambda는 일부 AWS 서비스 및 SDK에 대한 재귀 루프를 자동으로 감지하고 중지합니다. 자세한 내용은 Lambda 재귀 루프 감지를 사용하여 무한 루프 방지 단원을 참조하십시오.

Lambda: 프로비저닝된 동시성을 사용한 별칭 라우팅

문제: 별칭 라우팅 중에 프로비저닝된 동시성 초과 호출.

Lambda는 간단한 확률 모델을 사용하여 두 함수 버전 간에 트래픽을 분산시킵니다. 트래픽 수준이 낮으면 각 버전에서 구성된 트래픽과 실제 트래픽의 비율 간에 큰 차이가 나타날 수 있습니다. 함수가 프로비저닝된 동시성을 사용하는 경우 별칭 라우팅이 활성 상태인 동안 더 많은 수의 프로비전된 동시성 인스턴스를 구성하여 초과(spillover) 호출을 방지할 수 있습니다.

Lambda: 프로비저닝된 동시성으로 콜드 스타트

문제: 프로비저닝된 동시성을 활성화한 후 콜드 스타트가 표시됩니다.

함수에 대한 동시 실행 수가 프로비저닝된 동시성의 구성된 수준보다 작거나 이와 같으면 콜드 스타트가 없어야 합니다. 프로비저닝된 동시성이 정상적으로 작동하는지 확인하려면 다음을 수행하세요.

  • 함수 버전 또는 별칭에서 프로비저닝된 동시성이 활성화되어 있는지 확인합니다.

    참고

    게시되지 않은 버전의 함수($LATEST)에서는 프로비저닝된 동시성을 구성할 수 없습니다.

  • 트리거가 올바른 함수 버전 또는 별칭을 간접 호출하는지 확인합니다. 예를 들어, Amazon API Gateway를 사용하는 경우 API Gateway가 $LATEST가 아닌 프로비저닝된 동시성을 사용하여 함수 버전 또는 별칭을 간접 호출하는지 확인합니다. 프로비저닝된 동시성이 사용되고 있는지 확인하려면 ProvisionedConcurrencyInvocations Amazon CloudWatch 지표를 살펴보면 됩니다. 0이 아닌 값은 함수가 초기화된 실행 환경에서 호출을 처리하고 있음을 나타냅니다.

  • ProvisionedConcurrencySpilloverInvocations CloudWatch 지표를 살펴봐서 함수 동시성이 프로비저닝된 동시성의 구성된 수준을 초과하는지 확인합니다. 0이 아닌 값은 프로비저닝된 모든 동시성이 사용 중이고 일부 호출이 콜드 스타트로 발생했음을 나타냅니다.

  • 호출 빈도(초당 요청 수)를 확인하세요. 프로비저닝된 동시성이 있는 함수의 최대 비율은 프로비저닝된 동시성별 초당 10개의 요청입니다. 예를 들어, 100 개의 프로비저닝된 동시성으로 구성된 함수는 초당 1,000개의 요청을 처리할 수 있습니다. 호출 비율이 초당 1,000개의 요청을 초과하면 일부 콜드 스타트가 발생할 수 있습니다.

Lambda: 새 버전으로 콜드 스타트

문제: 함수의 새 버전을 배포하는 동안 콜드 스타트가 나타납니다.

함수 별칭을 업데이트하면 Lambda는 별칭에 구성된 가중치를 기반으로 프로비저닝된 동시성을 새 버전으로 자동으로 이동시킵니다.

오류: KMSDisabledException: 사용된 KMS 키가 비활성화되어 있으므로 Lambda에서 환경 변수의 암호화를 해제할 수 없음. 해당 함수의 KMS 키 설정을 확인해야 함

AWS Key Management Service(AWS KMS) 키가 비활성화되어 있거나 Lambda에서 이 키를 사용할 수 있도록 하는 권한 부여가 취소된 경우 이 오류가 발생할 수 있습니다. 권한 부여가 누락된 경우 다른 키를 사용하도록 함수를 구성합니다. 그런 다음 사용자 지정 키를 다시 할당하여 권한 부여를 다시 만듭니다.

EFS: 함수가 EFS 파일 시스템을 마운트할 수 없음

오류: EFSMountFailureException: 이 함수는 액세스 포인트 arn:aws:elasticfilesystem:us-east-2:123456789012:access-point/fsap-015cxmplb72b405fd를 사용하여 EFS 파일 시스템을 마운트할 수 없습니다.

함수의 파일 시스템에 대한 마운트 요청이 거부되었습니다. 함수의 권한을 확인하고 해당 파일 시스템 및 액세스 포인트가 존재하며 사용할 준비가 되었는지 확인합니다.

EFS: 함수가 EFS 파일 시스템에 연결할 수 없음

오류: EFSMountConnectivityException: 이 함수는 액세스 포인트 arn:aws:elasticfilesystem:us-east-2:123456789012:access-point/fsap-015cxmplb72b405fd를 사용하여 Amazon EFS 파일 시스템에 연결할 수 없습니다. 네트워크 구성을 확인하고 다시 시도하세요.

함수가 NFS 프로토콜(TCP 포트 2049)을 사용하여 함수의 파일 시스템에 대한 연결을 설정할 수 없습니다. VPC 서브넷에 대한 보안 그룹 및 라우팅 구성을 확인합니다.

함수의 VPC 구성 설정을 업데이트한 후 이러한 오류가 발생하면 파일 시스템을 탑재 해제했다가 다시 탑재해 봅니다.

EFS: 시간 초과로 인해 함수가 EFS 파일 시스템을 마운트할 수 없음

오류: EFSMountTimeoutException: 이 함수는 마운트 시간 초과로 인해 액세스 포인트 {arn:aws:elasticfilesystem:us-east-2:123456789012:access-point/fsap-015cxmplb72b405fd}를 사용하여 EFS 파일 시스템을 마운트할 수 없습니다.

함수가 함수의 파일 시스템에 연결할 수 있었지만 마운트 작업 시간이 초과되었습니다. 잠시 후 다시 시도를 하고, 함수의 동시성을 제한하여 파일 시스템의 부하를 줄이기 방법을 고려합니다.

Lambda: Lambda가 시간이 너무 오래 걸리는 IO 프로세스를 탐지함

EFSIOException: Lambda가 너무 오래 걸리는 IO 프로세스를 탐지했기 때문에 이 함수 인스턴스가 중지되었습니다.

이전 호출이 시간 초과되어 Lambda가 함수 핸들러를 종료할 수 없었습니다. 이 문제는 연결된 파일 시스템에 버스트 크레딧이 부족하여 기본 처리량이 충분하지 않은 경우에 발생할 수 있습니다. 처리량을 늘리려면 파일 시스템의 크기를 늘리거나 프로비저닝된 처리량을 사용할 수 있습니다.