Этап "dev уже существует" для AWS Безсерверный API с Cloudformation - PullRequest
0 голосов
/ 21 апреля 2020

Мне нужно настроить Этап по умолчанию, сгенерированный с помощью AWS :: Serverless :: Api.

При создании стека возникает ошибка " dev уже существует ".

Код моего шаблона:

AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31

Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: my-service
      StageName: dev

  MyApiDeployment:
    Type: AWS::ApiGateway::Deployment
    Properties:
      RestApiId: !Ref MyApi
      StageName: dev

  MyStage:
    Type: AWS::ApiGateway::Stage
    DependsOn: MyApiDeployment
    Properties:
      StageName: dev
      RestApiId: !Ref MyApi
      DeploymentId: !Ref MyApiDeployment

  LambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: MyAssembly::MyNamespace::MyHandler
      Runtime: dotnetcore2.1
      Events:
        ApiRoot:
          Type: Api
          Properties:
            RestApiId: !Ref MyApi
            Path: /
            Method: ANY

Выводит ошибку:

MyStage                                  CREATE_FAILED                            dev already exists

Цель - сделать ссылку на Stage из другого ресурса в том же файле шаблона.

  MyMapping:
    Type: AWS::ApiGateway::BasePathMapping
    Properties:
      BasePath: my-path
      RestApiId: !Ref MyApi
      Stage: !Ref MyStage

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Я нашел решение на этом форуме: https://github.com/awslabs/serverless-application-model/issues/192#issuecomment -520893111

Ссылка в свойстве Stage должна быть с !Ref MyApi.Stage и не с именем по строке.

Правильный код:

  MyMapping:
    Type: AWS::ApiGateway::BasePathMapping
    Properties:
      BasePath: my-path
      RestApiId: !Ref MyApi
      Stage: !Ref MyApi.Stage
0 голосов
/ 21 апреля 2020

Произошла ошибка, потому что вы пытаетесь создать один и тот же ресурс дважды . Указывая имя этапа в ресурсе AWS :: Serverless :: Api [ MyApi ], вы создаете этот этап.

Как и согласно документации , ступень не должна указываться для шлюза API; однако делает для SAM. Попробуйте удалить ваш сценический ресурс [ MyStage ] и переустановить его.

Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: my-service
      StageName: dev

  MyStage:
    Type: AWS::ApiGateway::Stage
    DependsOn: MyApiDeployment
    Properties:
      StageName: dev
      RestApiId: !Ref MyApi
      DeploymentId: !Ref MyApiDeployment
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...