【问题标题】:AWS Cloudformation: No change set if the CF's Referenced S3 files are changedAWS Cloudformation:如果 CF 的引用 S3 文件发生更改,则没有更改集
【发布时间】:2021-11-09 21:02:11
【问题描述】:

我的 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 控制台做同样的事情,即更新参数并点击更新它工作正常。

任何建议都将受到高度赞赏。

【问题讨论】:

  • “更新命令失败” - 究竟是什么错误?
  • @marcin 未检测到更改集。
  • 也许您可以扩展您的问题并澄清“仅在 S3 文件中更改”是什么意思?使用 aws 控制台和 aws cli 有什么不同?

标签: amazon-web-services amazon-cloudformation aws-step-functions aws-cloudformation-custom-resource


【解决方案1】:

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

我在状态机资源的“标签”部分添加了这个参数,它对我有用。

【讨论】:

    【解决方案2】:

    当您更新模板时。它不会查看 S3 上引用的文件以查看是否有任何更改。所以它会简单地看到文件位置没有改变,并得出模板本身没有改变的结论。

    由于您的问题并不完整,我将不得不根据一些假设来回答。您可以在包含您的定义的 S3 存储桶上启用版本控制,并将 S3 版本标识符作为参数传递给您的堆栈以使用 as a property of your StepFunction S3 Location declaration。如果您这样做,您可以将状态机声明的新版本上传到 S3,并将该版本标识符用作更新 CloudFormation 堆栈的参数。

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

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 2012-12-04
      • 2022-10-24
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      相关资源
      最近更新 更多