我的CF具有步骤函数状态机配置,其定义放置在某些S3位置。
现在,如果在定义中有任何更改,即仅在S3文件中更改,在这种情况下,更新CF失败。
Solution I tried我已经在我的CF中声明了一个参数(说buildVersion), S3中的每一个变化都将导致新的构建版本和我通过参数发送的这个构建版本
aws cloudformation --region "xyz" update-stack --stack-name "my stack name" --timeout-in-minutes 15 --template-body "CF file path" --parameters "parameter-file path"
这就是我的参数文件的样子,所以在调用这个命令之前,我用这个buildVersion参数更新参数文件。
[
{"ParameterKey":"EnvironmentName", "ParameterValue":"dev"},
{"ParameterKey":"BuildVersion", "ParameterValue":"0.0"}
]
但是它不能解决目的和更新命令失败,如果我对AWS控制台做同样的事情,即更新参数并点击更新,它工作正常。
任何建议都将非常感谢。
当你更新你的模板。它不会查看S3上引用的文件,以查看是否有任何更改。因此,它只会看到文件位置没有改变,并得出模板本身没有改变的结论。
既然你的问题不完全,我只能基于一些假设来回答。您可以在保存定义的S3存储桶上启用版本控制,并将S3版本标识符作为参数传递给堆栈,以用作StepFunction S3 Location声明的属性。如果您这样做,您可以将状态机声明的新版本上传到S3,并使用该版本标识符作为更新CloudFormation堆栈的参数。
当一个新的statemmachine定义被上传时,你可以在S3上使用CodePipeline或Lambda触发器自动更新CloudFormation堆栈,从而自动化更新CloudFormation堆栈的整个过程。
BuildVersion方法的问题是,该参数不参与AWS资源创建,并且通过CLI更新该参数不会影响更改集中的任何内容。
我已经在状态机资源的'Tag'部分添加了这个参数,它为我工作了。