为了账号安全,请及时绑定邮箱和手机立即绑定

golang aws CreateChangeSet 验证错误

golang aws CreateChangeSet 验证错误

Go
达令说 2022-06-21 16:09:47
尝试更新现有 Cloudformation 模板中参数的单个键/值。...svc := cloudformation.New(AWSSession)// Add parameters. Used in AWS CreateStack/UpdateStack callvar params []*cloudformation.Parameterfor 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 calllog.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: Parameters: [Key1, Key2, Key3, ...] must have values它似乎需要模板中存在的所有 cloudformation 参数的键/值。有没有办法只提供我需要更新的新的/现有的键/值对?在 golang aws 文档中,我发现 *cloudformation.Parameter 结构对每个值都有一个 UsePreviousValue。但是,除了避免修改现有值之外,我没有看到它的用途,它仍然需要我在部署的 cfn 模板中提供相同的参数键。我错过了什么吗?在已部署环境中更新现有值似乎是一种相对直接的方法。想知道其他人是如何处理这件事的。我是否应该查询现有环境以读取所有参数键/值,修改我需要的 1,然后提交变更集?
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

我认为使用UsePreviousValue是您可以做到这一点的唯一方法。


AWS CLI的行为相同,其中create-change-set或update-stack将要求您再次列出所有参数并UsePreviousValue="true"为每个参数设置 。


如果你想避免一直这样做,你可以在你的周围创建一个包装器CreateChangeSet,它会自动填充参数。


此限制直接源自CloudFormation REST API。为 API 提供的示例还明确列出了所有参数并用于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]


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信