更新依赖堆栈

时间:2019-03-03 12:15:35

标签: amazon-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,这是完全可以理解的。但是,我从这里看不到如何进行更新。

有什么方法可以更新这种依赖堆栈吗?亚马逊的walkthrough似乎根本没有涉及这个话题。

2 个答案:

答案 0 :(得分:1)

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

  

注意

     

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

     

[...]

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

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

  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输出。

这有点乏味,但应该可以。

答案 1 :(得分:0)

由于其他答案建议的方法看起来更长,这是我在阅读this guide后克服此问题的方法:

  1. 我已经更新了导入堆栈(即stack-lambda)以使用导出参数的实际值(我使用AWS控制台进行了此操作,因此无需更改yml代码,提交和部署)< / li>
  2. 部署导出堆栈(即stack-layer)并确保问题已解决
  3. 从代码库部署导入堆栈。

此操作非常迅速,无需更改源代码并中断服务运行。 希望这会有用,请随时评论您的问题。