常见的 AWS Cloudformation CodePipeline 部署代码段如下所示:
- Name: CreateChangeSet
ActionTypeId:
Category: Deploy
Owner: AWS
Version: '1'
Provider: CloudFormation
Configuration:
ActionMode: CHANGE_SET_REPLACE
RoleArn: ...
StackName: ...
ChangeSetName: deploy-commit
TemplatePath: ...
Capabilities: CAPABILITY_IAM
InputArtifacts:
- Name: ...
RunOrder: 1
- Name: ExecuteChangeSet
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: '1'
Configuration:
ActionMode: CHANGE_SET_EXECUTE
ChangeSetName: deploy-commit
RoleArn: ..
StackName: ...
RunOrder: 2
我们创建一个更改集并执行。是否有一种模式或方式可以让我们为每个新版本获得唯一的ChangeSetName
。原因CHANGE_SET_REPLACE
删除了前一个并创建了一个具有相同名称的新名称,因此我们丢失了历史记录。
您的源操作(GitHub 或 CodeCommit(应该已经具有更改历史记录。但不幸的是,根据您的要求,CodePipeline 的 CloudFormation 不支持为每个执行创建具有不同名称的更改集。以下链接中列出了所有可能的操作模式,并且没有一种模式支持为每次执行创建具有不同名称的更改集。https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/continuous-delivery-codepipeline-action-reference.html#w2ab1c13c13b9
满足您需求的一种可能方法是使用 CodeBuild、Lambda 调用或自定义操作类型编写您自己的自定义 CloudFormation 操作类型。您可以拥有自己的实现来调用 CloudFormation API,以使用新名称创建更改集并部署更改集。有关自定义操作类型的详细信息,请参阅 https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-create-custom-action.html