CloudFormation 从 CodePipeline 传递参数
Posted
技术标签:
【中文标题】CloudFormation 从 CodePipeline 传递参数【英文标题】:CloudFormation passing parameters from CodePipeline 【发布时间】:2018-02-25 06:33:17 【问题描述】:我有一个 SAM 应用程序和一个 CodePipeline 设置来部署它。我想将参数从我的管道传递到 SAM 的 YAML 文件中。我尝试使用ParameterOverrides
,但似乎仍然得到:
参数:[AppName] 必须有值(服务:AmazonCloudFormation;状态代码:400;错误代码:ValidationError;请求 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"'
这有什么问题吗?
【问题讨论】:
你让它工作了吗? 【参考方案1】:您似乎正试图在 CHANGE_SET_EXECUTE
操作模式期间应用 ParameterOverrides
。如果我没记错的话,在后台,这映射到 CloudFormations ExecuteChangeSet 操作,它没有 Parameters 属性。
解决方案是在创建更改集时应用参数。这将在 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
【讨论】:
什么是 ProjectParameterOverrides?以上是关于CloudFormation 从 CodePipeline 传递参数的主要内容,如果未能解决你的问题,请参考以下文章
从 CloudFormation 模板中的 DropDownList 中选择多个值
从 lambda 函数中检索 cloudformation 堆栈名称
阻止 CloudFormation 从 CloudFront 中删除 Lambda 边缘关联