AWS Cloudformation:如果更改了 CF 的引用 S3 文件,则不会设置更改

AWS Cloudformation: No change set if the CF's Referenced S3 files are changed

我的 CF 具有 Step Function 状态机配置,其定义位于某个 S3 位置。

现在如果定义有任何变化,即仅在 S3 文件中发生变化,在这种情况下更新 CF 将失败。

我试过的解决方法 我已经在我的 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 版本标识符作为参数传递给您的堆栈以使用 as a property of your StepFunction S3 Location declaration。如果这样做,您可以将新版本的状态机声明上传到 S3,并将该版本标识符用作更新 CloudFormation 堆栈的参数。

您可以使用 S3 上的 CodePipeline 或 Lambda 触发器自动更新 CloudFormation 堆栈的整个过程,以便在上传新的 StateMachine 定义时自动更新 CloudFormation 堆栈。

BuildVersion 方法的问题是,尽管 CLI 不影响更改集中的任何内容,但此参数并未参与 AWS 资源创建和更新此参数。

我在状态机资源的 'Tag' 部分添加了这个参数,它对我有用。