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

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

AWS Lambda 함수 오류(Go)

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

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

예외를 반환하는 함수 생성

다음 코드 샘플에서는 Lambda 함수에서 직접 예외를 발생시키고 직접 처리하는 사용자 지정 오류 처리를 보여줍니다. Go의 사용자 지정 오류는 errors 모듈을 가져와야 합니다.

package main import ( "errors" "github.com/aws/aws-lambda-go/lambda" ) func OnlyErrors() error { return errors.New("something went wrong!") } func main() { lambda.Start(OnlyErrors) }

다음을 반환합니다.

{ "errorMessage": "something went wrong!", "errorType": "errorString" }

작동 방식

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

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

다른 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에서 Go 코드 계측 섹션을 참조하세요.

다음 단계