我正在使用 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