CodePipeline 找不到我的 Yaml 模板



我正在使用 AWS CodePipeline 构建 CD 管道。我使用 S3 存储桶作为管道的源获取我的YAML模板,然后将其作为输出工件推送,作为输入工件作为部署阶段的输入。

我面临的问题是 CodePipeline 加密YAML模板并将其放入 S3 工件存储中,因此当 CloudFormation 查找输入工件时,它确实会找到该文件,因为它的名称已更改,那么如何阻止管道加密工件?

这是我的CodePipeline CloudFormation模板:

Resources:
  ArtifactStoreBucket:
    Type: AWS::S3::Bucket
    Properties:
      VersioningConfiguration:
        Status: Enabled
  Pipeline:
    Type: AWS::CodePipeline::Pipeline
    Properties:
      ArtifactStore:
        Location: !Ref 'ArtifactStoreBucket'
        Type: S3
      DisableInboundStageTransitions: []
      Name: !Ref 'PipelineName'
      RoleArn: !GetAtt [PipelineRole, Arn]
      Stages:
        - Name: S3Source
          Actions:
          - Name: TemplateSource
            ActionTypeId:
              Category: Source
              Owner: AWS
              Provider: S3
              Version: '1'
            Configuration:
              S3Bucket: !Ref 'S3Bucket'
              S3ObjectKey: !Ref 'CFNTemplateName'
            OutputArtifacts:
              - Name: TemplateSource
                EncryptionDisabled: true
            RunOrder: '1'    
        - Name: DeployToTest
          Actions:
            - Name: CreateChangeSetTest
              ActionTypeId:
                Category: Deploy
                Owner: AWS
                Version: 1
                Provider: CloudFormation
              Configuration:
                ChangeSetName: sample-lambda-dev
                ActionMode: CHANGE_SET_REPLACE
                StackName: sample-lambda-dev
                Capabilities: CAPABILITY_NAMED_IAM
                TemplatePath: !Sub "TemplateSource2::${CFNTemplateName}"
                RoleArn: !GetAtt [CFNRole, Arn]
              RunOrder: 1
            - Name: DeployChangeSetTest
              ActionTypeId:
                Category: Deploy
                Owner: AWS
                Version: 1
                Provider: CloudFormation
              Configuration:
                ChangeSetName: sample-lambda-dev
                ActionMode: CHANGE_SET_EXECUTE
                StackName: sample-lambda-dev
                RoleArn: !GetAtt [CFNRole, Arn]
              RunOrder: 2

确保我提供了正确的工件和正确的模板名称。

在此行:

模板路径: !子 "TemplateSource2::${CFNTemplateName}"

是名为 TemplateSource2 的项目 - 但模板中没有定义输出项目TemplateSource2。这必须重命名。

对于CFNTemplateName:您已经在源代码部分中使用它来定义工件(是一个 zip 文件)在 s3 上的位置

当您声明 TemplatePath 时,您引用一个工件并声明该工件内部的路径。

从文档中:

AWS CloudFormation 模板文件的位置,其格式为 ArtifactName::TemplateFileName。

按如下所示更新此行:

模板路径: !子 "模板源::您的/路径/内部/the/zip/file"

CreateChangeSetTest操作中存在两个问题:

1) 它缺少输入工件部分 - 您必须声明每个操作可用的工件。2) 工件的名称错误 - 您在源阶段中定义了TemplateSource输出工件,但使用的是TemplateSource2名称。

将步骤更改为以下内容:

            - Name: CreateChangeSetTest
          ActionTypeId:
            Category: Deploy
            Owner: AWS
            Version: 1
            Provider: CloudFormation
          Configuration:
            ChangeSetName: sample-lambda-dev
            ActionMode: CHANGE_SET_REPLACE
            StackName: sample-lambda-dev
            Capabilities: CAPABILITY_NAMED_IAM
            TemplatePath: !Sub "TemplateSource::${CFNTemplateName}"
            RoleArn: !GetAtt [CFNRole, Arn]
          RunOrder: 1
          InputArtifacts:
            - Name: TemplateSource

最新更新