AWS Lambda 함수 오류(Python) - AWS Lambda

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS Lambda 함수 오류(Python)

코드에서 오류가 발생하면 Lambda는 해당 오류의 JSON 표현을 생성합니다. 이 오류 문서는 호출 로그에 표시되며 동기 호출 시 출력에 표시됩니다.

이 페이지에서는 Lambda 콘솔과 AWS CLI를 사용하여 Python 런타임에 대한 Lambda 함수 호출 오류를 보는 방법에 대해 설명합니다.

작동 방식

Lambda 함수를 호출하면 Lambda는 호출 요청을 수신하고 실행 역할의 권한을 검증한 다음 이벤트 문서가 유효한 JSON 문서인지 확인하고 파라미터 값을 검사합니다.

요청이 검증을 통과하면 Lambda가 함수 인스턴스로 요청을 보냅니다. Lambda 런타임 환경은 이벤트 문서를 객체로 변환한 후 함수 핸들러에 전달합니다.

Lambda에서 오류가 발생하면 오류의 원인을 나타내는 예외 유형, 메시지 및 HTTP 상태 코드를 반환합니다. Lambda 함수를 호출한 클라이언트 또는 서비스는 프로그래밍 방식으로 오류를 처리하거나 최종 사용자에게 전달할 수 있습니다. 올바른 오류 처리 동작은 애플리케이션 유형, 대상 및 오류 출처에 따라 다릅니다.

다음 목록에서는 Lambda에서 수신할 수 있는 상태 코드의 범위를 설명합니다.

2xx

응답에서 X-Amz-Function-Error 헤더가 있는 2xx 시리즈 오류는 Lambda 런타임 또는 함수 오류를 나타냅니다. 2xx 시리즈 상태 코드는 Lambda가 요청을 수락했음을 나타내지만 Lambda는 오류 코드 대신 응답에 X-Amz-Function-Error 헤더를 포함시켜 오류를 나타냅니다.

4xx

4xx 시리즈 오류는 호출 클라이언트 또는 서비스가 요청을 수정하거나, 권한을 요청하거나, 요청을 다시 시도하여 수정할 수 있는 오류를 나타냅니다. 4xx 이외의 429 시리즈 오류는 일반적으로 요청에 오류가 있음을 나타냅니다.

5xx

5xx 시리즈 오류는 Lambda 관련 문제나 함수의 구성 또는 리소스 관련 문제를 나타냅니다. 5xx 시리즈 오류는 사용자 조치 없이 해결할 수 일시적인 조건을 나타낼 수 있습니다. 이러한 문제는 호출 클라이언트 또는 서비스가 해결할 수 없지만 Lambda 함수의 소유자가 문제를 해결할 수 있습니다.

호출 오류의 전체 목록은 InvokeFunction 오류를 참조하십시오.

Lambda 콘솔 사용

테스트 이벤트를 구성하고 출력을 확인하여 Lambda 콘솔에서 함수를 호출할 수 있습니다. 출력은 함수의 실행 로그에 캡처되며 활성 추적이 활성화된 경우 AWS X-Ray에도 캡처됩니다.

Lambda 콘솔에서 함수를 호출하려면
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 테스트할 함수를 선택하고 테스트를 선택합니다.

  3. 테스트 이벤트에서 새 이벤트를 선택합니다.

  4. 템플릿을 선택합니다.

  5. 이름에 테스트의 이름을 입력합니다. 텍스트 입력 상자에 JSON 테스트 이벤트를 입력합니다.

  6. 변경 사항 저장을 선택합니다.

  7. 테스트를 선택합니다.

Lambda 콘솔은 함수를 동기식으로 호출하고 결과를 표시합니다. 응답, 로그 및 기타 정보를 보려면 세부 정보 섹션을 확장합니다.

AWS Command Line Interface(AWS CLI) 사용

AWS CLI은(는) 명령줄 셸의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다. 이 섹션의 단계를 완료하려면 다음이 필요합니다.

AWS CLI에서 Lambda 함수를 호출하면 AWS CLI가 응답을 두 개의 문서로 나눕니다. 명령 프롬프트에 AWS CLI 응답이 표시됩니다. 오류가 발생한 경우 응답에 FunctionError 필드가 포함됩니다. 함수가 반환한 호출 응답 또는 오류가 출력 파일에 기록됩니다. 예: output.json 또는 output.txt.

다음 invoke 명령 예제는 함수를 호출하고 호출 응답을 output.txt 파일에 쓰는 방법을 보여줍니다.

aws lambda invoke \ --function-name my-function \ --cli-binary-format raw-in-base64-out \ --payload '{"key1": "value1", "key2": "value2", "key3": "value3"}' output.txt

cli-binary-format 옵션은 AWS CLI 버전 2를 사용할 때 필요합니다. 이 설정을 기본 설정으로 지정하려면 aws configure set cli-binary-format raw-in-base64-out을(를) 실행하세요. 자세한 내용은 AWS CLI 지원되는 글로벌 명령줄 옵션을 AWS Command Line Interface 사용 설명서 버전 2에서 참조하세요.

명령 프롬프트에 AWS CLI 응답이 표시되어야 합니다.

{ "StatusCode": 200, "FunctionError": "Unhandled", "ExecutedVersion": "$LATEST" }

output.txt 파일에 함수 호출 응답이 표시되어야 합니다. 동일한 명령 프롬프트에서 다음을 사용하여 명령 프롬프트에 출력을 표시할 수도 있습니다.

cat output.txt

명령 프롬프트에 호출 응답이 표시되어야 합니다.

{"errorMessage": "'action'", "errorType": "KeyError", "stackTrace": [" File \"/var/task/lambda_function.py\", line 36, in lambda_handler\n result = ACTIONS[event['action']](event['number'])\n"]}

또한 Lambda는 함수의 로그에 최대 256KB의 오류 객체를 기록합니다. 자세한 내용은 AWS Lambda 함수 로깅(Python) 섹션을 참조하세요.

다른 AWS 서비스의 오류 처리

다른 AWS 서비스가 함수를 호출하면 서비스가 호출 유형을 선택하고 동작을 다시 시도합니다.AWS 서비스는 리소스의 수명 주기 이벤트에 대한 응답으로 일정에 따라 함수를 호출하거나 사용자의 요청을 처리할 수 있습니다. 일부 서비스는 비동기식으로 함수를 호출하고 Lambda가 오류를 처리하도록 하며, 일부 서비스는 호출을 재시도하거나 오류를 사용자에게 전달합니다.

예를 들어 API Gateway는 모든 호출 및 함수 오류를 내부 오류로 처리합니다. Lambda API가 호출 요청을 거부하면 API Gateway는 500 오류 코드를 반환합니다. 함수가 실행되지만 오류를 반환하거나 잘못된 형식으로 응답을 반환하는 경우 API Gateway에서 502 오류 코드를 반환합니다. 오류 응답을 사용자 지정하려면 코드에서 오류를 포착하고 필요한 형식으로 응답을 지정해야 합니다.

오류의 출처와 원인을 확인하려면 AWS X-Ray를 사용하는 것이 좋습니다. X-Ray를 사용하면 오류가 발생한 구성 요소를 확인하고 오류에 대한 세부 정보를 볼 수 있습니다. 다음 예제는 API Gateway로부터 502 응답을 발생시킨 함수 오류를 보여줍니다.


          API Gateway 사용 시 함수 오류에 대한 추적 맵.

자세한 내용은 AWS Lambda에서 Python 코드 계측 섹션을 참조하세요.

오류 예제

다음 섹션에서는 Python Lambda 런타임을 사용하여 함수를 생성, 업데이트 또는 호출할 때 발생할 수 있는 일반적인 오류를 보여줍니다.

예 런타임 예외 — ImportError
{ "errorMessage": "Unable to import module 'lambda_function': Cannot import name '_imaging' from 'PIL' (/var/task/PIL/__init__.py)", "errorType": "Runtime.ImportModuleError" }

이 오류는 AWS Command Line Interface(AWS CLI)를 사용하여 C 또는 C++ 라이브러리가 포함된 배포 패키지를 업로드한 결과입니다. Pillow(PIL), numpy 또는 pandas 라이브러리를 예로 들 수 있습니다.

AWS SAM CLI sam build 명령을 --use-container 옵션과 함께 사용하여 배포 패키지를 생성하는 것이 좋습니다. AWS SAM CLI와 함께 이 옵션을 사용하면 Lambda와 호환되는 Lambda 유사 환경을 가진 Docker 컨테이너가 생성됩니다.

예 JSON 직렬화 오류 — 런타임. MarshalError
{ "errorMessage": "Unable to marshal response: Object of type AttributeError is not JSON serializable", "errorType": "Runtime.MarshalError" }

이 오류는 함수 코드에서 사용 중인 base64 인코딩 메커니즘의 결과일 수 있습니다. 예:

import base64 encrypted_data = base64.b64encode(payload_enc).decode("utf-8")

이 오류는 함수를 생성하거나 업데이트할 때 .zip 파일을 이진 파일로 지정하지 않은 결과일 수도 있습니다. fileb:// 명령 옵션을 사용하여 배포 패키지(.zip 파일)를 업로드하는 것이 좋습니다.

aws lambda create-function --function-name my-function --zip-file fileb://my-deployment-package.zip --handler lambda_function.lambda_handler --runtime python3.8 --role arn:aws:iam::your-account-id:role/lambda-ex

샘플 애플리케이션

이 안내서의 GitHub 저장소에는 오류 사용을 보여주는 샘플 응용 프로그램이 포함되어 있습니다. 각 샘플 애플리케이션에는 간편한 배포 및 정리를 위한 스크립트, AWS Serverless Application Model(AWS SAM) 템플릿 및 지원 리소스가 포함되어 있습니다.

Python의 샘플 Lambda 애플리케이션
  • blank-python – 로깅, 환경 변수, AWS X-Ray 추적, 계층, 단위 테스트 및 AWS SDK를 사용하는 방법을 보여주는 Python 함수입니다.

다음 단계