Amazon cloudformation UsePreviousTemplate(在CloudFormation UpdateStack中)可以与嵌套堆栈一起使用吗

Amazon cloudformation UsePreviousTemplate(在CloudFormation UpdateStack中)可以与嵌套堆栈一起使用吗,amazon-cloudformation,nested-stack,Amazon Cloudformation,Nested Stack,使用嵌套堆栈是AWS CloudFormation中的一个重要组成部分,它们确实解决了许多问题(代码重用、堆栈限制等) 在更新堆栈时(通过UpdateStack或变更集),可以提供UsePreviousTemplate=True,以指示CloudFormation使用堆栈当前使用的任何模板。如果您只想更新某些参数,尤其是如果您有一些自动脚本执行更新,那么这将非常有用(我们用github上的代码的SHA更新了一个参数,我们想让它生效,而CloudFormation为我们完成了其余的工作——构建和部

使用嵌套堆栈是AWS CloudFormation中的一个重要组成部分,它们确实解决了许多问题(代码重用、堆栈限制等)

在更新堆栈时(通过UpdateStack或变更集),可以提供
UsePreviousTemplate=True
,以指示CloudFormation使用堆栈当前使用的任何模板。如果您只想更新某些参数,尤其是如果您有一些自动脚本执行更新,那么这将非常有用(我们用github上的代码的SHA更新了一个参数,我们想让它生效,而CloudFormation为我们完成了其余的工作——构建和部署,所以我们在代码准备好部署后立即从lambda更新这个参数);在这种情况下,您希望确保所做的只是更新由参数控制的内容,而不是意外地提供新(或旧)模板

似乎没有任何文档说明当涉及嵌套堆栈时,如果您提供此参数会发生什么,也没有任何地方可以指定这方面有用的内容。在以下内容中似乎也没有任何有用的内容:

因此,提出以下问题:

  • 在具有嵌套堆栈的堆栈上使用
    UsePreviousTemplate=True
    执行更新时,行为是什么
  • 是否可以使用类似于
    UsePreviousTemplate=True
    的方法,不仅对父堆栈,而且对嵌套堆栈进行堆栈更新
在具有嵌套堆栈的堆栈上使用
UsePreviousTemplate=True
执行更新时,行为是什么? 正在使用上一个根堆栈模板。但是,此模板指向嵌套模板的s3位置,并且再次从此位置检索嵌套模板。这意味着:

  • s3上对该模板的任何更改都会导致将这些更改部署到嵌套堆栈中
  • 如果再也找不到模板,堆栈更新将失败
  • 一般来说,您总是会在变更集中看到嵌套的堆栈,(据推测),因为CloudFormation直到它实际运行时才知道模板中是否有更改。这也意味着父级的堆栈更新会更慢
如果通过向URL添加
?versionId=…
,在bucket中打开了版本控制,则可以使用版本化URL来避免这些问题中的第一个:

https://s3.#BUCKETREGION#.amazonaws.com/..../.../.../.../nested.template?versionId=XXXX

注意:无论嵌套堆栈中是否有宏(这合法地意味着至少它们在更新时需要重新计算),或者甚至是否提供了“自动展开”功能(如果没有,这将保证嵌套堆栈中没有宏),上述情况都是正确的

是否可以使用类似于
UsePreviousTemplate=True
的方法,不仅对父堆栈,而且对嵌套堆栈进行堆栈更新? 有可能设置一个堆栈策略,禁止对嵌套堆栈进行更新([此处][3],在“阻止对嵌套堆栈的更新”下),但是在我的实验中,它所做的只是不允许对父堆栈进行任何更新(因为任何更新都会自动影响客户端堆栈)

所以现在我倾向于说“不”,但我很高兴在这里被证明是错的

Type: AWS::CloudFormation::Stack
Properties: 
  NotificationARNs: 
    - String
  Parameters: 
    Key : Value
  Tags: 
    - Tag
  TemplateURL: String
  TimeoutInMinutes: Integer