내용으로 건너뛰기

CloudFormation 템플릿 또는 OpenAPI 정의를 사용하여 Lambda 통합이 포함된 REST API를 생성했습니다. API Gateway에서 “Execution failed” 오류가 발생하는 이유는 무엇입니까?

4분 분량
0

AWS CloudFormation 템플릿을 사용하여 AWS Lambda 통합을 포함하는 Amazon API Gateway REST API를 생성했습니다. API 메서드를 사용하여 Lambda 함수를 호출하면 오류 메시지와 500 상태 코드가 표시됩니다.

간략한 설명

Lambda 통합이 포함된 API Gateway REST API가 있는 경우 API는 POST HTTP 메서드를 사용하여 백엔드 Lambda 함수를 호출해야 합니다. 백엔드 통합 요청에 ANY 또는 GET 등과 같은 다른 HTTP 메서드를 사용하는 경우에는 호출이 실패합니다. 그러면 API Gateway가 Amazon CloudWatch Logs에서 다음 예와 유사한 오류 메시지를 반환합니다.

Mon Oct 14 14:08:49 UTC 2019 : Received response. Status: 403, Integration latency: 3 msMon Oct 14 14:08:49 UTC 2019 : Endpoint response headers: {Date=Mon, 14 Oct 2019 14:08:49 GMT, Content-Length=130, Connection=keep-alive, x-amzn-RequestId=abc1d2ef-34ab-56c7-de8f-90123a456789}
Mon Oct 14 14:08:49 UTC 2019 : Endpoint response body before transformations: <AccessDeniedException>
<Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>
Mon Oct 14 14:08:49 UTC 2019 : Lambda invocation failed with status: 403. Lambda request id: abc1d2ef-34ab-56c7-de8f-90123a456789
Mon Oct 14 14:08:49 UTC 2019 : Execution failed due to configuration error:
Mon Oct 14 14:08:49 UTC 2019 : Method completed with status: 500

참고: REST API 프론트엔드의 경우 여전히 모든 HTTP 메서드를 설정할 수 있습니다.

Lambda 통합이 포함된 REST API를 생성하는 경우 다음 방법 중 하나를 사용하여 백엔드 통합 요청에 대한 POST를 지정하십시오.

참고: API Gateway 콘솔을 사용하여 Lambda 통합을 구성하는 경우 백엔드 통합 요청이 자동으로 POST로 설정됩니다.

해결 방법

참고: AWS CLI 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

AWS CloudFormation을 통해 모든 스택 리소스를 관리하고 CloudFormation 외부에서는 스택 리소스를 변경하지 않는 것이 좋습니다.

백엔드 통합 요청에 대한 HTTP 메서드를 POST로 변경하는 데 사용하는 방법은 원래 템플릿 정의에 따라 다릅니다. CloudFormation에서 배포한 API Gateway를 업데이트하는 프로세스는 OpenAPI에서 생성한 API Gateway를 업데이트하는 프로세스와 다릅니다.

CloudFormation에서 생성된 API Gateway

CloudFormation에서 생성된 API Gateway의 경우 스택 템플릿을 업데이트해야 합니다. CloudFormation 템플릿에서 AWS::ApiGateway::Method 리소스를 정의하여 메서드를 생성한 경우, HttpMethod 속성을 POST로 업데이트하십시오. 지침은 예제를 참조하십시오.

메서드에서 AWS::ApiGateway::RestAPI 리소스의 Body 속성에 대해 OpenAPI 정의를 사용하는 경우, API 정의 파일의 httpMethodPOST로 설정하십시오. 지침은 x-amazon-apigateway-integration 객체를 참조하십시오. 또한 aws-samples GitHub 리포지토리의 예제 Swagger 템플릿을 참조하십시오.

API를 업데이트하려면 편집한 템플릿으로 AWS CloudFormation 스택 업데이트를 실행하십시오.

"x-amazon-apigateway-integration" : {    "type" : "aws",

    "httpMethod" : "POST"

CloudFormation 외부에서 생성된 API Gateway

콘솔을 사용하여 메서드 업데이트

다음 단계를 완료하십시오.

  1. API Gateway 콘솔을 엽니다.
  2. API를 선택합니다.
  3. 리소스에서 Lambda와 통합된 HTTP 메서드를 선택합니다.
  4. 메서드 실행에서 통합 요청을 선택합니다.
  5. 통합 요청에서 HTTP 메서드에 대해 Lambda 함수 이름을 편집합니다.
  6. Lambda 함수에 대한 권한 추가 메시지가 표시되면 확인을 선택합니다.
  7. API를 배포합니다.
  8. (선택 사항) Lambda 함수와 통합된 HTTP 메서드를 테스트합니다.

참고: Lambda 함수에 대한 권한 추가 프롬프트에서 확인을 선택할 때마다 콘솔은 Lambda 함수의 리소스 정책에 새 구문을 추가합니다. 리소스 정책 크기 제한을 초과하지 않도록 하십시오. 자세한 내용은 함수 구성, 배포 및 실행API Gateway 콘솔을 사용하여 API 통합 요청 설정을 참조하십시오.

AWS CLI를 사용하여 메서드 업데이트

다음 단계를 완료하십시오.

  1. 통합 HTTP 메서드를 POST로 업데이트하려면 put-integration 명령을 실행합니다.

    aws apigateway put-integration \--rest-api-id 1234123412 \
    --resource-id a1b2c3 \
    --http-method ANY \
    --type AWS \
    --integration-http-method POST \
    --uri 'arn:aws:apigateway:us-west-2:lambda:path//2015-03-31/functions/arn:aws:lambda:us-east-1:123412341234:function:function_name/invocations
  2. API에 대해 구성된 리소스를 기존 단계에 배포하려면 create-deployment 명령을 실행합니다.

    aws apigateway create-deployment \--rest-api-id 1234123412 \
    --stage-name dev \
    --description 'Deployment to an existing dev stage'

OpenAPI 정의 가져오기를 사용하여 메서드 업데이트

다음 단계를 완료하십시오.

  1. API 정의 파일에서 httpMethod 속성 값을 POST로 설정합니다. 지침은 x-amazon-apigateway-integration 객체 및 aws-samples GitHub 리포지토리의 예제 Swagger 템플릿을 참조하십시오.
  2. API를 업데이트하려면 편집한 API 정의 파일을 API Gateway로 가져옵니다. OpenAPI 파일을 가져와서 기존 API 정의 업데이트를 참조하십시오.

관련 정보

AWS::ApiGateway::Method 통합

자습서: 두 개의 AWS 서비스 통합 및 하나의 Lambda 비프록시 통합을 포함하는 계산기 REST API 생성

스테이지 변수를 사용하여 API Gateway에서 Lambda 통합을 정의했습니다. API 메서드를 간접 호출할 때 “Internal server error”와 500 상태 코드가 나타나는 이유는 무엇입니까?

Lambda 프록시 통합을 사용하는 API Gateway REST API에서 발생하는 HTTP 502 오류를 해결하려면 어떻게 해야 합니까?

API Gateway에서 발생하는 “Invalid mapping expression specified” 오류를 해결하려면 어떻게 해야 합니까?

댓글 없음