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

최종 업데이트 날짜: 2021년 6월 21일

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

간략한 설명

Lambda 함수의 리소스 기반 정책에 API가 함수를 호출할 권한이 포함되어 있지 않으면 API Gateway가 내부 서버 오류 메시지를 반환합니다.

API를 통해 함수를 호출하는 스테이지 변수를 생성하는 경우, 다음 중 한 가지를 수행하여 필요한 권한을 추가해야 합니다.

참고: API Gateway 콘솔을 사용해 스탠더드 Lambda 통합으로 API Gateway API를 구축하는 경우, 콘솔이 자동으로 필수 권한을 추가합니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류 메시지가 표시되는 경우, AWS CLI 최신 버전을 사용했는지 확인하세요.

Amazon CloudWatch Logs를 검토하여 오류가 발생한 원인이 권한 누락 때문인지 확인하세요.

REST APIWebSocket API의 경우

API Gateway 실행 로그를 검토합니다. Invalid permissions on Lambda function(Lambda 함수에 권한이 잘못됨)과 비슷한 오류 메시지가 표시되는 경우 오류 원인은 권한 누락입니다. 자세한 정보를 알아보려면 API Gateway REST API 또는 WebSocket API 문제 해결을 위해 CloudWatch Logs를 켜려면 어떻게 해야 합니까?를 참조하세요.

HTTP API의 경우

API Gateway 액세스 로그를 검토합니다. Invalid permissions(잘못된 권한)를 포함한 오류 메시지가 표시되는 경우, 오류 원인은 권한 누락입니다. 자세한 내용은 HTTP API에 대한 로깅 구성을 참조하세요.

참고: integrationErrorMessage 컨텍스트 변수($context.integrationErrorMessage)에 검토할 오류 메시지가 포함되어 있습니다.

Lambda 함수의 리소스 기반 IAM 정책을 업데이트하여 API Gateway에 호출 권한을 부여하도록 하는 방법

Lambda 콘솔 지침

AWS 서비스에 함수 액세스 권한 부여의 지침을 따르세요.

다음은 API Gateway에 호출 권한을 부여하는 리소스 기반 정책의 예입니다.

{
    "Version": "2012-10-17",
    "Id": "default",
    "Statement": [
        {
            "Sid": "ServiceAllowListing",
            "Effect": "Allow",
            "Principal": {
              "Service": "apigateway.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:<AWS_Region>:<AWS_Account_Number>:function:<LambdaFunctionName>",
            "Condition": {
              "ArnLike": {
                "AWS:SourceArn": "arn:aws:execute-api:<AWS_Region>:<AWS_Account_Number>:<API_ID>"
              }
            }
        }
     ]
}

AWS CLI 지침

다음 add-permission AWS CLI 명령을 실행합니다.

중요: 명령을 실행하기에 앞서 다음과 같은 변수를 바꿉니다.

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

API Gateway가 Lambda 함수를 호출할 권한을 맡을 수 있도록 IAM 역할을 생성하는 법

API 호출을 위한 API Gateway 권한 모델의 지침을 따르세요.

참고: 자세한 정보는 IAM 권한으로 API 액세스 제어를 참조하세요.