尝试更新现有Cloudformation模板中参数的单个键/值。
...
svc := cloudformation.New(AWSSession)
// Add parameters. Used in AWS CreateStack/UpdateStack call
var params []*cloudformation.Parameter
for key, val := range cfnparamsOverrides {
log.Printf("Adding parameter key-> %v value-> %v", key, val)
param := &cloudformation.Parameter{}
param.ParameterKey = aws.String(key)
param.ParameterValue = aws.String(val)
params = append(params, param)
}
CreateChangeSetInput := &cloudformation.CreateChangeSetInput{
StackName: aws.String(stackARN), // required field.
ChangeSetName: aws.String(ChangeSetName), // must be a unique value
ChangeSetType: aws.String("UPDATE"),
// TemplateBody: aws.String(templateBody),
UsePreviousTemplate: aws.Bool(true),
Parameters: params}
// Issue AWS CreateChangeSet API call
log.Println("Issuing AWS CreateChangeSet() API call")
_, errCreateChangeSet := svc.CreateChangeSet(CreateChangeSetInput)
if errCreateChangeSet != nil {
return false, fmt.Errorf("Got error on CreateChangeSet: %v", errCreateChangeSet.Error())
}
仅设置了1个值,但是cloudformation模板验证引发以下内容:ValidationError:参数:[Key1,Key2,Key3,...]必须具有值
似乎模板中存在的所有cloudformation参数都需要键/值。有没有办法只提供我需要更新的新的/现有的键/值对?
在golang aws文档中,我发现* cloudformation.Parameter结构具有每个值的UsePreviousValue。但是,除了避免修改现有值外,我看不到有其他用途,它仍然需要我在已部署的cfn模板中提供相同的参数键。
我想念什么吗?在已部署环境中更新现有价值似乎是一种相对简单的方法。
想知道其他人对此的看法。我是否应该查询现有环境以读取所有参数键/值,修改所需的1,然后提交变更集?
最佳答案
我认为使用UsePreviousValue
是实现此目的的唯一方法。
AWS CLI 的行为相同,其中create-change-set
或update-stack
将要求您再次列出所有参数并为每个参数设置UsePreviousValue="true"
。
如果您想一直避免这样做,则可以在CreateChangeSet
周围创建一个包装器,以自动填充参数。
此限制直接源自CloudFormation REST API。为API提供的example还会显式列出所有参数,并使用UsePreviousValue
指示值的重复使用:
https://cloudformation.us-east-1.amazonaws.com/
?Action=CreateChangeSet
&ChangeSetName=SampleChangeSet
&Parameters.member.1.ParameterKey=KeyName
&Parameters.member.1.UsePreviousValue=true
&Parameters.member.2.ParameterKey=Purpose
&Parameters.member.2.ParameterValue=production
&StackName=arn:aws:cloudformation:us-east-1:123456789012:stack/SampleStack/1a2345b6-0000-00a0-a123-00abc0abc000
&UsePreviousTemplate=true
&Version=2010-05-15
&X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=[Access key ID and scope]
&X-Amz-Date=20160316T233349Z
&X-Amz-SignedHeaders=content-type;host
&X-Amz-Signature=[Signature]
关于amazon-web-services - golang aws CreateChangeSet验证错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63235899/