Lambda의 배포 문제 해결 - AWS Lambda

Lambda의 배포 문제 해결

함수를 업데이트할 때 Lambda는 업데이트된 코드 또는 설정으로 함수의 새 인스턴스를 시작하여 변경 사항을 배포합니다. 배포 오류로 인해 새 버전이 사용되지 않으며, 이는 배포 패키지, 코드, 권한 또는 도구 문제 때문에 발생할 수 있습니다.

Lambda API를 사용하거나 AWS CLI와 같은 클라이언트를 사용하여 함수로 업데이트를 직접 배포하면 출력에서 직접 Lambda의 오류를 볼 수 있습니다. AWS CloudFormation, AWS CodeDeploy 또는 AWS CodePipeline 같은 서비스를 사용하는 경우에는 해당 서비스 로그 또는 이벤트 스트림에서 Lambda의 응답을 찾아보세요.

다음 항목에서는 Lambda API, 콘솔 또는 도구를 사용할 때 발생할 수 있는 오류 및 문제에 대한 문제 해결 조언을 제공합니다. 여기에 나열되지 않은 문제를 발견하는 경우 이 페이지의 [Feedback] 버튼을 사용하여 해당 문제를 보고할 수 있습니다.

문제 해결 조언과 일반적인 지원 질문에 대한 답변은 AWS 지식 센터를 참조하세요.

Lambda 애플리케이션 디버깅 및 문제 해결에 대한 자세한 내용은 Serverless Land의 Debugging을 참조하세요.

일반: 권한이 거부됨 / 해당 파일을 로드할 수 없음

오류: EACCES: 권한 거부, '/var/task/index.js' 열기

오류: 해당 파일을 로드할 수 없음 -- 함수

오류: [Errno 13] 권한 거부: '/var/task/function.py'

Lambda 런타임은 배포 패키지의 파일을 읽을 수 있는 권한이 필요합니다. Linux 권한 8진수 표기법에서는 Lambda에 실행 불가능한 파일(rw-r--r--)에 대한 644개의 권한과 디렉터리 및 실행 파일에 대한 755개의 권한(rwxr-xr-x)이 필요합니다.

Linux 및 MacOS에서는 chmod 명령을 사용하여 배포 패키지의 파일 및 디렉터리에 대한 파일 권한을 변경합니다. 예를 들어, 실행 파일에 올바른 권한을 부여하려면 다음 명령을 실행합니다.

chmod 755 <filepath>

Windows에서 파일 권한을 변경하려면 Microsoft Windows 설명서의 Set, View, Change, or Remove Permissions on an Object를 참조하세요.

일반: UpdateFunctionCode 호출 시 오류 발생

오류: UpdateFunctionCode 작업을 호출할 때 오류 발생(RequestEntityTooLargeException)

배포 패키지 또는 계층 아카이브를 Lambda에 직접 업로드하면 ZIP 파일의 크기가 50MB로 제한됩니다. 더 큰 파일을 업로드하려면 Amazon S3에 저장하고 S3Bucket 및 S3Key 파라미터를 사용하세요.

참고

AWS CLI, AWS SDK 또는 다른 방법으로 파일을 직접 업로드하면 이진수 ZIP 파일이 base64로 변환되어 크기가 약 30% 증가합니다. 이를 허용하고 요청에서 다른 파라미터 크기를 허용하려면 Lambda가 적용하는 실제 요청 크기 제한이 더 큽니다. 이로 인해 50MB 제한은 근사값입니다.

Amazon S3: 오류 코드 PermanentRedirect.

오류: GetObject를 수행하는 동안 오류가 발생했습니다. S3 오류 코드: PermanentRedirect. S3 오류 메시지: 버킷이 us-east-2 리전에 있습니다. 이 리전을 사용하여 요청을 다시 시도하세요

Amazon S3 버킷에서 함수의 배포 패키지를 업로드할 때 버킷은 함수와 동일한 리전에 있어야 합니다. UpdateFunctionCode 호출 시 Amazon S3 객체를 지정하거나 AWS CLI 또는 AWS SAM CLI에서 패키지를 사용하고 명령을 배포할 때 이러한 문제가 발생할 수 있습니다. 애플리케이션을 개발하는 각 리전에 대한 배포 아티팩트 버킷을 생성합니다.

일반: 찾을 수 없음, 로드할 수 없음, 가져올 수 없음, 클래스를 찾을 수 없음, 해당 파일 또는 디렉터리가 없음

오류: 모듈 'function'을 찾을 수 없음

오류: 해당 파일을 로드할 수 없음 -- 함수

오류: 모듈 'function'을 가져올 수 없음

오류: 클래스를 찾을 수 없음: function.Handler

오류: fork/exec /var/task/function: 이러한 파일 또는 디렉터리 없음

오류: 어셈블리 'Function'에서 'Function.Handler' 유형을 로드할 수 없음.

함수의 핸들러 구성에 있는 파일 또는 클래스의 이름이 코드와 일치하지 않습니다. 자세한 내용은 다음 단원을 참조하십시오.

일반: 정의되지 않은 메서드 핸들러

오류: index.handler가 정의되지 않거나 내보내지지 않음

오류: 모듈 'function'에 핸들러 'handler'가 없음

오류: #<LambdaHandler:0x000055b76ccebf98>에 정의되지 않은 메서드 `handler'

오류: class function.Handler에서 적절한 메서드 서명이 있는 handleRequest라는 이름의 퍼블릭 메서드 없음

오류: 어셈블리 'Function'에서 'Function.Handler' 유형의 'handleRequest' 메서드를 찾을 수 없음

함수의 핸들러 구성에 있는 핸들러 메서드의 이름이 코드와 일치하지 않습니다. 각 런타임은 filename.methodname 같은 핸들러의 이름 지정 규칙을 정의합니다. 핸들러는 함수가 호출될 때 런타임이 실행하는 함수 코드의 메서드입니다.

일부 언어의 경우 Lambda는 핸들러 메서드에 특정 이름이 있어야 하는 인터페이스를 라이브러리에 제공합니다. 각 언어의 핸들러 이름 지정에 관한 자세한 내용은 다음 항목을 참조하세요.

Lambda: 계층 변환 실패

오류: Lambda 계층 변환에 실패했습니다. 이 문제를 해결하는 방법에 대한 자세한 내용은 Lambda 사용 설명서의 Lambda의 배포 문제 해결 페이지를 참조하세요.

계층으로 Lambda 함수를 구성하면 Lambda는 계층을 함수 코드와 병합합니다. 이 프로세스가 완료되지 않으면 Lambda는 이 오류를 반환합니다. 이 오류가 발생한 경우 다음 단계를 수행합니다.

  • 계층에서 사용하지 않는 파일 삭제

  • 계층에서 심볼 링크 삭제

  • 모든 함수 계층의 디렉터리와 이름이 같은 모든 파일의 이름 변경

Lambda: InvalidParameterValueException or RequestEntityTooLargeException

오류: InvalidParameterValueException: 제공된 환경 변수가 4KB 제한을 초과했기 때문에 Lambda에서 환경 변수를 구성할 수 없음. 측정된 문자열: {"A1":"uSFeY5cyPiPn7AtnX5BsM...

오류: RequestEntityTooLargeException: UpdateFunctionConfiguration 작업에 대한 요청은 5,120바이트보다 작아야 함

함수의 구성에 저장되는 변수 객체의 최대 크기는 4,096바이트를 초과할 수 없습니다. 여기에는 키 이름, 값, 따옴표, 쉼표 및 대괄호가 포함됩니다. HTTP 요청 본문의 총 크기도 제한됩니다.

{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Environment": { "Variables": { "BUCKET": "amzn-s3-demo-bucket", "KEY": "file.txt" } }, ... }

이 예제에서 객체는 39자이며 공백 없이 문자열 {"BUCKET":"amzn-s3-demo-bucket","KEY":"file.txt"}로 저장될 때 39바이트를 차지합니다. 환경 변수 값의 표준 ASCII 문자는 각각 1바이트를 사용합니다. 확장 ASCII 및 유니코드 문자는 문자당 2~4바이트를 사용할 수 있습니다.

Lambda: InvalidParameterValueException

오류: InvalidParameterValueException: 제공된 환경 변수에 현재 수정 불가능한 예약된 키가 포함되어 있기 때문에 Lambda에서 환경 변수를 구성할 수 없음.

Lambda는 내부 사용을 위해 일부 환경 변수 키를 예약합니다. 예를 들어 AWS_REGION는 런타임에 현재 리전을 결정하는 데 사용되며 재정의될 수 없습니다. PATH를 비롯한 다른 변수는 런타임에 사용되지만 함수 구성에서 확장될 수 있습니다. 전체 목록은 정의된 런타임 환경 변수 단원을 참조하세요.

Lambda: 동시성 및 메모리 할당량

Error: Specified ConcurrentExecutions for function decreases account's UnreservedConcurrentExecution below its minimum value

Error: 'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008

이러한 오류는 계정에 대한 동시성 또는 메모리 할당량이 초과될 때 발생합니다. 새 AWS 계정에 감소된 동시성 및 메모리 할당량이 적용되었습니다. 동시성과 관련한 오류를 해결하려면 할당량 증가를 요청하면 됩니다. 메모리 할당량 증가는 요청할 수 없습니다.

  • 동시성: 예약되거나 프로비저닝된 동시성을 사용하여 함수를 만들려고 하거나 함수별 동시성 요청(PutFunctionConcurrency)이 계정의 동시성 할당량을 초과하는 경우 오류가 발생할 수 있습니다.

  • 메모리: 함수에 할당된 메모리의 양이 계정의 메모리 할당량을 초과하면 오류가 발생합니다.