【问题标题】:AWS CodePipeline: Get CloudFormation outputs in CodeBuildAWS CodePipeline:在 CodeBuild 中获取 CloudFormation 输出
【发布时间】:2018-08-24 05:44:35
【问题描述】:

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

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

  1. 推送到 github 存储库触发管道
  2. CloudFormation 构建/更新后端基础架构
  3. CodeBuild 做了一些额外的工作

目前,CloudFormation 输出以下内容:

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

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

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation devops aws-codepipeline aws-codebuild


    【解决方案1】:

    根据: 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)中,您将有一个字典,其中键是输出名称,值是输出值。

    【讨论】:

    • 有什么方法可以在 CloudFormations 输出中包含所有文件?这是在 CodeBuild 中使用工件完成的:文件:-'*/'
    • “所有文件”是什么意思? CloudFormation 操作仅部署单个堆栈并将其输出保存为 JSON 文件。该文件可能是另一个操作的输入。
    • 我正在使用代码管道。 CloudFormation 之后的下一步是另一个 CodeBuild(只能采用一个输入工件)。
    • 我需要通过输入 CloudFormation 得到 PLUS 由 CloudFormation 生成的输出
    • 我已经通过调用操作 (Lambda) 解决了此类问题。创建 Lambda 函数(这里是一个示例:docs.aws.amazon.com/codepipeline/latest/userguide/…)并使用两个输入工件调用它。然后,此类 Lambda 会将这些工件合并为一个并输出。这有点复杂,但我找不到更好的解决方案。
    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2017-07-14
    • 2019-04-03
    • 2019-12-15
    • 2017-05-28
    相关资源
    最近更新 更多