CloudFormation 从 CodePipeline 传递参数
CloudFormation passing parameters from CodePipeline
我有一个 SAM 应用程序和一个用于部署它的 CodePipeline 设置。我想将参数从我的管道向下传递到 SAM 的 YAML 文件中。我尝试使用 ParameterOverrides
但似乎仍然得到:
Parameters: [AppName] must have values (Service: AmazonCloudFormation; Status Code: 400; Error Code: ValidationError; Request ID: 46d1dfd6-9a9a-11e7-a59d-999618d6a174)
我的 sam.yml
参数定义
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Parameters:
AppName:
Type: String
Description: Prefix for resources
定义参数的部分覆盖:
- Name: ExecuteChangeSet
Actions:
- Name: Lambda
ActionTypeId:
Category: Deploy
Owner: AWS
Version: 1
Provider: CloudFormation
Configuration:
ActionMode: CHANGE_SET_EXECUTE
ChangeSetName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}
StackName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}
ParameterOverrides: !Sub '{"AppName": "${PipelineName}-lambda"}'
这有什么问题吗?
您似乎正试图在 CHANGE_SET_EXECUTE
操作模式期间应用 ParameterOverrides
。如果我没记错的话,在幕后,这会映射到没有参数 属性 的 CloudFormations ExecuteChangeSet 操作。
此问题的解决方案是在创建更改集时应用参数。这将在 CodePipeline 中以 CHANGE_SET_REPLACE
操作模式完成。或者,您可以查看 CREATE_UPDATE
。查看 AWS CloudFormation Configuration Properties 了解更多详情。
这是一个创建然后执行更改集的示例
- Name: CreateChangeSet
Actions:
- Name: Lambda
ActionTypeId:
Category: Deploy
Owner: AWS
Version: 1
Provider: CloudFormation
InputArtifacts:
- Name: BuildOutputArtifact
Configuration:
ActionMode: CHANGE_SET_REPLACE
ChangeSetName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}
StackName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}
ParameterOverrides: !Ref ProjectParameterOverrides
TemplatePath: BuildOutputArtifact::SamDeploymentTemplate.yaml
- Name: ExecuteChangeSet
Actions:
- Name: Lambda
ActionTypeId:
Category: Deploy
Owner: AWS
Version: 1
Provider: CloudFormation
Configuration:
ActionMode: CHANGE_SET_EXECUTE
ChangeSetName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}
StackName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}
我有一个 SAM 应用程序和一个用于部署它的 CodePipeline 设置。我想将参数从我的管道向下传递到 SAM 的 YAML 文件中。我尝试使用 ParameterOverrides
但似乎仍然得到:
Parameters: [AppName] must have values (Service: AmazonCloudFormation; Status Code: 400; Error Code: ValidationError; Request ID: 46d1dfd6-9a9a-11e7-a59d-999618d6a174)
我的 sam.yml
参数定义
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Parameters:
AppName:
Type: String
Description: Prefix for resources
定义参数的部分覆盖:
- Name: ExecuteChangeSet
Actions:
- Name: Lambda
ActionTypeId:
Category: Deploy
Owner: AWS
Version: 1
Provider: CloudFormation
Configuration:
ActionMode: CHANGE_SET_EXECUTE
ChangeSetName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}
StackName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}
ParameterOverrides: !Sub '{"AppName": "${PipelineName}-lambda"}'
这有什么问题吗?
您似乎正试图在 CHANGE_SET_EXECUTE
操作模式期间应用 ParameterOverrides
。如果我没记错的话,在幕后,这会映射到没有参数 属性 的 CloudFormations ExecuteChangeSet 操作。
此问题的解决方案是在创建更改集时应用参数。这将在 CodePipeline 中以 CHANGE_SET_REPLACE
操作模式完成。或者,您可以查看 CREATE_UPDATE
。查看 AWS CloudFormation Configuration Properties 了解更多详情。
这是一个创建然后执行更改集的示例
- Name: CreateChangeSet
Actions:
- Name: Lambda
ActionTypeId:
Category: Deploy
Owner: AWS
Version: 1
Provider: CloudFormation
InputArtifacts:
- Name: BuildOutputArtifact
Configuration:
ActionMode: CHANGE_SET_REPLACE
ChangeSetName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}
StackName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}
ParameterOverrides: !Ref ProjectParameterOverrides
TemplatePath: BuildOutputArtifact::SamDeploymentTemplate.yaml
- Name: ExecuteChangeSet
Actions:
- Name: Lambda
ActionTypeId:
Category: Deploy
Owner: AWS
Version: 1
Provider: CloudFormation
Configuration:
ActionMode: CHANGE_SET_EXECUTE
ChangeSetName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}
StackName: !Sub
- '${PipelineName}-lambda'
- {PipelineName: !Ref PipelineName}