Ошибки стека CloudFormation с REST API не содержат никаких методов - PullRequest
1 голос
/ 09 июля 2019

Получите следующее при развертывании стека CloudFormation:

REST API не содержит никаких методов (Сервис: AmazonApiGateway; Код статуса: 400; Код ошибки: BadRequestException; Идентификатор запроса: d527f56e-a1e1-11e9-a0a4-af7563b2b15a)

В стеке есть одна лямбда, запускаемая API с одним ресурсом и методом:

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 ]

Мне не хватает того, где я облажался.

1 Ответ

2 голосов
/ 09 июля 2019

Положите 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 не содержать любые методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...