更新堆栈模板
要修改 CloudFormation 堆栈中的资源或属性,您必须更新堆栈的模板。以该堆栈的现有模板为基础,然后对其进行更改。如果模板存储在源控制系统中,请以该模板的副本为起点。否则,您可以从 CloudFormation 获取该模板的副本。
如果只需要修改堆栈的参数或设置(如堆栈的 Amazon SNS 主题),则可以重复使用现有的模板,而不获取副本。
您可以使用基础设施编辑器或文本编辑器来修改 CloudFormation 堆栈模板。
使用基础设施编辑器更新现有的堆栈模板
-
在 CloudFormation 控制台
的堆栈页面上,选择要更新的堆栈的名称。 -
在选定堆栈的堆栈详细信息窗格中,选择模板选项卡,然后选择在基础设施编辑器中查看。
-
CloudFormation 将在基础设施编辑器中打开该模板。在应用程序编辑器中,您可以从资源面板中拖放、配置和连接资源(卡片)。有关更多信息,请参阅 How to compose in AWS 基础设施编辑器。
使用 AWS CLI 更新现有的堆栈模板
-
要获取要更新的堆栈的模板,请使用 get-template CLI 命令。
-
将模板复制并粘贴到文本文件中,进行修改,然后保存它。只 复制模板。该命令将模板括在引号中,但是不得复制模板两端的引号。模板本身以左括号开始,以右括号结束。指定对本文件中堆栈资源的更改。
更改模板时应记住以下几点:
-
您无法添加、修改或删除不支持更新的资源使用的参数。
-
对于大多数资源,更改资源的逻辑名称相当于删除该资源并将其替换为新资源。与重命名的资源关联的任何其他资源也需要更新,并且可能会导致它们被替换。其他资源需要您更新属性(不仅仅是逻辑名称)才能启动更新。
-
某些资源可能对您可以为某些属性设置的值有限制。例如,对 RDS 数据库实例的
AllocatedStorage
属性的更改必须大于当前值。如果您的更新违反了这些规则,该部分将会失败。 -
更新一个资源也会影响引用该资源的其他资源。如果您使用
Ref
或GetAtt
之类的函数来设置基于其他资源的属性,则当被引用的资源发生更改时,CloudFormation 也会更新引用资源。 -
要了解更新特定资源属性的影响,请参阅 AWS 资源类型参考。对于每种属性,更新将产生以下一种影响:
-
您可以使用 validate-template CLI 命令或通过在控制台上指定模板来验证模板的 JSON 或 YAML 语法。控制台会自动执行验证。但这些方法仅会验证模板的语法,而不会验证您为资源指定的属性值对于该资源是否有效。要进行更复杂的验证或查看最佳实践,您还可以使用其他工具,例如 CloudFormation Linter(cfn-lint)
和 CloudFormation Rain(rain fmt) 。
注意
有时,CloudFormation 不允许您尝试进行某些更改,并且会告诉您不允许进行更改。然而,该消息可能是异步出现的,因为在默认情况下,CloudFormation 创建和更新资源的顺序是不确定的。