Amazon API Gateway에서 스테이지 변수를 사용하여 AWS Lambda 통합을 정의했습니다. API 메서드를 호출할 때 "내부 서버 오류"와 500 상태 코드가 표시되는 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 4월 30일

스테이지 변수를 사용하여 AWS Lambda 함수를 호출하도록 Amazon API Gateway API를 설정했습니다. API 메서드를 호출하면 API가 "내부 서버 오류"와 500 상태 코드를 반환합니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

이 오류는 함수를 호출할 수 있는 API에 대한 권한이 Lambda 함수의 리소스 기반 정책에 없는 경우 발생합니다.

API Gateway 콘솔에서 표준 Lambda 통합을 사용하여 API Gateway API를 구축하는 경우에는 필요한 권한이 자동으로 추가됩니다. 그러나 API를 통해 Lambda 함수를 호출하도록 스테이지 변수를 설정할 때는 이러한 권한을 수동으로 추가해야 합니다.

해결 방법

API의 로그 확인

오류가 권한 누락으로 인한 것인지 확인하려면 API의 로그를 검토합니다.

REST APIWebSocket API의 경우 실행 로그에서 "Lambda 함수의 잘못된 권한"과 유사한 메시지를 확인합니다. 자세한 내용은 API Gateway REST API 또는 WebSocket API 문제 해결을 위해 CloudWatch Logs를 활성화하려면 어떻게 해야 합니까?를 참조하십시오.

HTTP API의 경우 액세스 로그에서 권한에 대한 유사 메시지를 확인합니다. integrationErrorMessage 컨텍스트 변수 ($context.integrationErrorMessage)에 검토할 오류 메시지가 포함됩니다. 자세한 내용은 HTTP API에 대한 로깅 구성을 참조하십시오.

필요한 권한 추가

API에 대한 lambda: InvokeFunction 권한을 추가하려면 AWS Command Line Interface(AWS CLI)에서 Lambda add-permission 명령을 실행합니다.

예제 명령에서 다음 변수를 바꿉니다.

aws lambda add-permission --function-name arn:aws:lambda:region:account-id:function:function-name --statement-id statement-id-guid --action lambda:InvokeFunction --source-arn arn:aws:execute-api:region:account-id:api-id/*/GET/lambdasv1