AWS CodePipeline:在 CodeBuild 中获取 CloudFormation 输出

AWS CodePipeline: Get CloudFormation outputs in CodeBuild

我正在使用 AWS CodePipeline(Cloudformation 和 CodeBuild)学习一些 DevOps 技术。

我的(简化的)管道是这样的:

  1. 推送到 github 回购触发管道
  2. CloudFormationbuilds/updates 后端基础设施
  3. CodeBuild 做了一些额外的工作

此时,CloudFormation 输出以下内容:

Outputs:
  RestApiId:
    Value: !Ref ApiGateway
    Description: 'API Id'

问题:如何获取CloudBuild中的ApiGateway ID?

根据: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/continuous-delivery-codepipeline-parameter-override-functions.html

您可以像这样指定 CodePipeline 步骤(来自文档):

- Name: CreateTestStackA
  Actions:
    - Name: CloudFormationCreate
      ActionTypeId:
        Category: Deploy
        Owner: AWS
        Provider: CloudFormation
        Version: '1'
      Configuration:
        ActionMode: CREATE_UPDATE
        Capabilities: CAPABILITY_IAM
        OutputFileName: TestOutput.json
        RoleArn: !GetAtt [CFNRole, Arn]
        StackName: StackA
        TemplateConfiguration: TemplateSource::test-configuration.json
        TemplatePath: TemplateSource::teststackA.yaml
      InputArtifacts:
        - Name: TemplateSourceA
      OutputArtifacts:
        - Name: StackAOutput
      RunOrder: '1'

所以在Configuration中你需要添加OutputFileName参数并指定输出工件名称。然后您可以将该工件用作 CodeBuild 的输入。在输出文件 (TestOutput.json) 中,您将有一个字典,其中键是输出名称,值是输出值。