AWS CodePipeline - развертывание в CloudFormation: сбой при выполнении действия Требуются возможности: [CAPABILITY_AUTO_EXPAND]

Я только начал с конвейера AWS CI/CD. Я хочу сделать простой конвейер для развертывания лямбда-функции (а позже и шлюза API):

Фиксация в CodeCommit -> Подготовка пакета CloudFormation в CodeBuild -> Развертывание в CloudFormation

CodeCommit и CodeBuild работают довольно хорошо, но на этапе развертывания (в CodePipeline) я всегда получаю эту ошибку:

Ошибка CodePipeline

Но в пользовательском интерфейсе я не могу выбрать CAPABILITY_AUTO_EXPAND, только CAPABILITY_IAM, и это не решает проблему:

CodePipeline Deploy Config

Если я выполняю развертывание через CLI, я думаю, что могу установить опцию CAPABILITY_AUTO_EXPAND, но я хочу сделать это через пользовательский интерфейс.

Что я могу сделать?

SAM шаблон yaml:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Returns the body
Resources:
  TestFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: test.handler
      Runtime: nodejs8.11.0
      CodeUri: ./
      Events:
        TestAPI:
          Type: Api
          Properties:
            Path: /test
            Method: POST

2 ответа

Решение

Я (вроде) решил мою проблему с помощью ответа в этой теме: aws CAPABILITY_AUTO_EXPAND консоль веб-кода с облачной информацией

Похоже, что пользовательский интерфейс AWS не отображает эту опцию, и вам необходимо обновить конвейер через клиентскую среду AWS.

Я не знаю, как это сделать через пользовательский интерфейс, но в CloudFormation вы бы указали это в шаблоне на узле "Возможности", см. "Возможности" ниже.

Ниже приведен только фрагмент и не является правильно сформированным JSON для CloudFormation.

 "Resources": {
"Pipeline": {
  "Type": "AWS::CodePipeline::Pipeline",
  "Properties": {
    "ArtifactStore": {
      "Location": {
        "Fn::Join": [
          "-",
          [
            "bubbleboy",
            {
              "Ref": "AWS::AccountId"
            }
          ]
        ]
      },
      "Type": "S3"
    },
    "Name": {
      "Ref": "AWS::StackName"
    },
    "RoleArn": {
      "Fn::GetAtt": [
        "PipelineRole",
        "Arn"
      ]
    },
    "Stages": [
      {
        "Actions": [
          {
            "ActionTypeId": {
              "Category": "Source",
              "Owner": "AWS",
              "Provider": "CodeCommit",
              "Version": "1"
            },
            "Configuration": {
              "RepositoryName": {
                "Ref": "Repo"
              },
              "BranchName": {
                "Ref": "Branch"
              }
            },
            "Name": "Source",
            "RunOrder": "1",
            "OutputArtifacts": [
              {
                "Name": "Source-Artifact"
              }
            ]
          }
        ],
        "Name": "SourceCode"
      },
      {
        "Actions": [
          {
            "ActionTypeId": {
              "Category": "Build",
              "Owner": "AWS",
              "Provider": "CodeBuild",
              "Version": "1"
            },
            "Configuration": {
              "ProjectName": {
                "Ref": "CodeBuildStage1NetCoreCodeBuildProject1"
              }
            },
            "Name": "Build",
            "RunOrder": "1",
            "OutputArtifacts": [
              {
                "Name": "Build-Artifact"
              }
            ],
            "InputArtifacts": [
              {
                "Name": "Source-Artifact"
              }
            ]
          }
        ],
        "Name": "Build"
      },
      {
        "Actions": [
          {
            "ActionTypeId": {
              "Category": "Deploy",
              "Owner": "AWS",
              "Provider": "CloudFormation",
              "Version": "1"
            },
            "Configuration": {
              "ActionMode": "CHANGE_SET_REPLACE",
              "StackName": {
                "Fn::Join": [
                  "-",
                  [
                    {
                      "Ref": "AWS::StackName"
                    },
                    "deploy"
                  ]
                ]
              },
              "Capabilities": "CAPABILITY_IAM",
              "RoleArn": {
                "Fn::GetAtt": [
                  "CreateChangesetCloudFormationRole1",
                  "Arn"
                ]
              },
              "ChangeSetName": {
                "Ref": "AWS::StackName"
              },
              "TemplatePath": "Build-Artifact::Deploy.template",
              "ParameterOverrides": {
                "Fn::Join": [
                  "",
                  [
                    "{ \"YadaYadaBubbleBoyWebApiBucket\": { \"Fn::GetArtifactAtt\": [ \"Build-Artifact\", \"BucketName\" ] }, \"YadaYadaBubbleBoyWebApiKey\": { \"Fn::GetArtifactAtt\": [ \"Build-Artifact\", \"ObjectKey\" ] },\"DbBranch\":\"",
                    {
                      "Fn::If": [
                        "isstaging",
                        "master",
                        {
                          "Ref": "Branch"
                        }
                      ]
                    },
                    "\"}\"DatabaseStack\":\"",
                    {
                      "Fn::If": [
                        "isstaging",
                        "database-stage",
                        {
                          "Ref": "DatabaseStack"
                        }
                      ]
                    },
                    "\"}"
                  ]
                ]
              }
            },
            "Name": "CreateChangeset",
            "RunOrder": "1",
            "InputArtifacts": [
              {
                "Name": "Build-Artifact"
              }
            ]
          },
          {
            "ActionTypeId": {
              "Category": "Deploy",
              "Owner": "AWS",
              "Provider": "CloudFormation",
              "Version": "1"
            },
            "Configuration": {
              "ActionMode": "CHANGE_SET_EXECUTE",
              "StackName": {
                "Fn::Join": [
                  "-",
                  [
                    {
                      "Ref": "AWS::StackName"
                    },
                    "deploy"
                  ]
                ]
              },
              "Capabilities": "CAPABILITY_IAM",
              "RoleArn": {
                "Fn::GetAtt": [
                  "ExecuteChangesetCloudFormationRole1",
                  "Arn"
                ]
              },
              "ChangeSetName": {
                "Ref": "AWS::StackName"
              }
            },
            "Name": "ExecuteChangeset",
            "RunOrder": "2"
          }
        ],
        "Name": "Deploy"
      }
    ]
  },
  "DeletionPolicy": "Delete"
},
Другие вопросы по тегам