1. ホーム
  2. amazon-web-services

[解決済み] CloudFormation Stack Errors with REST API Doesn't Contain Any Methods

2022-02-10 12:15:17

質問

CloudFormationスタックをデプロイする際に以下を取得します。

REST APIには、メソッド(Service: AmazonApiGateway; ステータスコード 400; Error Code: BadRequestException; リクエストID: d527f56e-a1e1-11e9-a0a4-af7563b2b15a)

このスタックには、単一のリソースとメソッドを持つAPIによってトリガーされる単一のLambdaがあります。

FailureReporting:
    Type: "AWS::ApiGateway::RestApi"
    DependsOn: "MyLambdaFunction"
    Properties:
      Name: "FailureReporting"
      FailOnWarnings: true
  FailureReportingDeployment:
    Type: AWS::ApiGateway::Deployment
    Properties:
      RestApiId:
        Ref: "FailureReporting"
      Description: "Production environment supporting version-1 of the interface."
      StageName: "v1"
  Failures:
    Type: "AWS::ApiGateway::Resource"
    Properties:
      RestApiId: !Ref "FailureReporting"
      ParentId: !GetAtt ["FailureReporting", "RootResourceId"]
      PathPart: "failures"
  FailuresMethodGet:
    Type: "AWS::ApiGateway::Method"
    Properties:
      RestApiId: !Ref "FailureReporting"
      ResourceId: !Ref "Failures"
      HttpMethod: "GET"
      AuthorizationType: "NONE"
      MethodResponses:
        - StatusCode: "200"
      Integration:
        IntegrationHttpMethod: "POST"
        Type: "AWS_PROXY"
        IntegrationResponses:
          - StatusCode: "200"
        Credentials: !GetAtt [ 3FailureReportingExecuteAPI, Arn ]
        Uri: !Sub
          - "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${lambdaArn}/invocations"
          - lambdaArn: !GetAtt [ GetFailureKeysByOrderNumber, Arn ]

どこで失敗したのかがわからない。

解決方法は?

を配置します。 DependsOn をデプロイメントリソースに追加します。

  FailureReportingDeployment:
    Type: AWS::ApiGateway::Deployment
    DependsOn:
      - "FailuresMethodGet"
    Properties:
      Description: "Production environment supporting version-1 of the interface."
      RestApiId: !Ref "FailureReporting"
      StageName: "v1"

直感的でない に埋もれている。 ドキュメント を見ると、次のように書かれています。

AWS::ApiGateway::RestApi リソースとそのメソッドを作成した場合 (AWS::ApiGateway::Methodを使用)と同じテンプレートで作成します。 デプロイメントでは、デプロイメントが RestApi のメソッドに依存する必要があります。そのためには 依存関係を作成するには、デプロイメントに DependsOn 属性を追加します。もし そうしないと、AWS CloudFormationはデプロイメントを作成した後、すぐに メソッドを含まないRestApiリソースが作成されてしまい、AWS CloudFormationは次のようなエラーに遭遇します。REST API doesn't はメソッドを含んでいません。