更新依赖堆栈

mep*_*i42 9 aws-cloudformation

我有一个名为 的堆栈stack-layer,它导出一个 Lambda 层的 ARN,另一个名为 的堆栈stack-lambda,其中包含一个引用该 Lambda 层的 Lambda。

当我尝试更新时stack-layer,出现错误:Export layer-arn cannot be deleted as it is in use by stack-lambda,这是完全可以理解的。但是,我不知道如何从这里进行更新。

有没有办法更新这种依赖堆栈?亚马逊的演练似乎根本没有触及这个话题。

wjo*_*dan 6

如文档中所述Fn::ImportValue,无法修改引用的输出确实是预期的行为:

笔记

以下限制适用于跨堆栈引用:

[...]

  • 您无法修改或删除另一个堆栈引用的输出值。

为了在更新输出时解决此问题,您可以使用第二个临时输出值来处理转换:

  1. 更新stack-layer以添加包含新值的第二个输出(例如layer-arn-2);
  2. 更新stack-lambda,将"Fn::ImportValue": "layer-arn"引用更改为引用layer-arn-2
  3. 更新stack-layer以删除现在未使用的layer-arn输出。
    (或者:更新stack-layer以设置layer-arn为与 相同的值layer-arn-2;更新stack-lambda为引用layer-arn;然后最后更新stack-layer以删除layer-arn-2输出。

这有点乏味,但应该有用。

  • 当您的 Cloudfront 需要 30 分钟才能更新时,这不是一个选择。AWS 这太糟糕了,他们应该做点什么来解决这个错误 (23认同)

mir*_*ham 5

由于另一个答案建议的方法看起来有点长,以下是我在阅读本指南后为克服此问题所做的操作:

  1. 我已更新导入堆栈(即stack-lambda)以使用导出参数的实际值(我使用 AWS 控制台执行此操作,这样我就不必在 yml 代码中进行更改、提交和部署)
  2. 部署导出堆栈(即stack-layer)并确保问题消失
  3. 部署从代码库导入堆栈。

这是很快完成的,无需更改源代码和中断服务运行。希望这会有用,欢迎评论您的问题。