如何将 CloudFormation 输出传递到 CodeBuild 阶段?

How To Pass CloudFormation Outputs To A CodeBuild Stage?

我有 2 个 CloudFormation 和 CodeBuild CodePipeline 阶段:

        - Actions:
            - ActionTypeId:
                Category: "Deploy"
                Owner: "AWS"
                Provider: "CloudFormation"
                Version: "1"
              Configuration:
                ActionMode: "CREATE_UPDATE"
                Capabilities: "CAPABILITY_AUTO_EXPAND,CAPABILITY_NAMED_IAM,CAPABILITY_IAM"
                RoleArn: !GetAtt CodePipelineServiceRole.Arn
                StackName: !Ref CFNStackName
                TemplatePath: !Sub "BuildArtifact::${ArtifactName}"
                TemplateConfiguration: BuildArtifact::CFTemplateConfig.json
                ParameterOverrides: !Sub '{"Env": "${Env}"}'
              Name: "CloudFormation-step"
              Region: !Sub ${AWS::Region}
              InputArtifacts:
                - Name: BuildArtifact
              RunOrder: 1
          Name: "Deploy"
        - Actions:
            - ActionTypeId:
                Category: "Test"
                Owner: "AWS"
                Provider: "CodeBuild"
                Version: "1"
              Configuration:
                ProjectName: !Ref CodeBuildTest
              InputArtifacts:
                - Name: SourceArtifact
              Name: "Test"
              Region: !Sub ${AWS::Region}
              RunOrder: 

CloudFormation 阶段正在创建 ALB。我想将该 ALB 的 ARN 传递到 CodeBuild 阶段。如何将 ALB ARN 传递到 CodeBuild buildspec.yml 文件?

假设您的 CFN 模板 returns 其输出中的 ALB ARN,例如称为 AlbArn,那么您可以为其提供一个 namespace,稍后使用命名空间来获取值。

例如(可能需要进一步调整):

        - Actions:
            - ActionTypeId:
                Category: "Deploy"
                Owner: "AWS"
                Provider: "CloudFormation"
                Version: "1"
              Configuration:
                ActionMode: "CREATE_UPDATE"
                Capabilities: "CAPABILITY_AUTO_EXPAND,CAPABILITY_NAMED_IAM,CAPABILITY_IAM"
                RoleArn: !GetAtt CodePipelineServiceRole.Arn
                StackName: !Ref CFNStackName
                TemplatePath: !Sub "BuildArtifact::${ArtifactName}"
                TemplateConfiguration: BuildArtifact::CFTemplateConfig.json
                ParameterOverrides: !Sub '{"Env": "${Env}"}'
              Name: "CloudFormation-step"
              Region: !Sub ${AWS::Region}
              InputArtifacts:
                - Name: BuildArtifact
              Namespace: CloudFromationDeployNamespace # <--- namespace
              RunOrder: 1
          Name: "Deploy"
        - Actions:
            - ActionTypeId:
                Category: "Test"
                Owner: "AWS"
                Provider: "CodeBuild"
                Version: "1"
              Configuration:
                ProjectName: !Ref CodeBuildTest
                EnvironmentVariables: | # <- pass the AlbArn as ENV variable
                    {
                      "ALB_NAME": "#{CloudFromationDeployNamespace.AlbArn}"
                    }   
              InputArtifacts:
                - Name: SourceArtifact
              Name: "Test"
              Region: !Sub ${AWS::Region}            
              RunOrder: