修改堆栈模板 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

修改堆栈模板

如果您要修改在堆栈模板中声明的资源和属性,则必须修改堆栈的模板。要确保仅更新计划更新的资源,请将现有堆栈的模板用作起点,然后对该模板进行更新。如果您要在源控制系统中管理模板,请使用该模板的副本作为起点。否则,您可以从 CloudFormation 获取堆栈模板的副本。

如果您希望只修改堆栈的参数或设置 (如堆栈的 Amazon SNS 主题),则可以重新使用现有的堆栈模板。您无需获取堆栈模板的副本或修改堆栈模板。

注意

如果模板包含不受支持的更改,CloudFormation 将返回一条更改不被允许的消息。然而,该消息可能是异步出现的,因为在默认情况下,CloudFormation 创建和更新资源的顺序是不确定的。

更新堆栈的模板 (控制台)

注意

CloudFormation 控制台中的应用程序编辑器模式是对 Amazon CloudFormation Designer 功能的一项改进。我们建议您尽可能使用应用程序编辑器,而不使用 Designer。有关更多信息,请参阅 使用应用程序编辑器直观地创建模板

  1. CloudFormation 控制台堆栈页面上,单击要更新的堆栈的名称。

  2. 在选定堆栈的详细信息窗格中,选择 Template (模板) 窗格,然后单击 View in Designer (在 Designer 中查看)

    Amazon CloudFormation 在 Amazon CloudFormation Designer 中打开此堆栈的模板副本。

  3. 修改模板。

    您可以使用 Amazon CloudFormation Designer 拖放界面或集成的 JSON 和 YAML 编辑器修改模板。有关使用 Amazon CloudFormation Designer 的更多信息,请参阅 使用旧版 Amazon CloudFormation Designer 创建模板

    仅修改您希望更新的资源。对于不更新的资源和属性,使用与当前堆栈配置相同的值。您可以通过完成以下任何操作来修改模板:

    • 添加新资源,或删除现有资源。

      对于大多数资源,更改资源的逻辑名称相当于删除该资源并将其替换为新资源。与重命名的资源关联的任何其他资源也需要更新,并且可能会导致它们被替换。其他资源需要您更新属性(不仅仅是逻辑名称)才能启动更新。

    • 添加、修改或删除现有资源的属性。

      要了解更新特定资源属性的影响,请参阅 Amazon 资源类型参考。对于每种属性,更新将产生以下一种影响:

    • 添加、修改或删除资源的属性 (MetadataDependsOnCreationPolicyUpdatePolicyDeletionPolicy)。

      重要

      您无法更新 CreationPolicyUpdatePolicy 属性本身。您只能在包含添加、修改或删除资源的更改时更新它们。例如,您可以添加或修改资源的元数据属性。

    • 添加、修改或删除参数声明。但是,您无法添加、修改或删除不支持更新的资源使用的参数。

    • 添加、修改或删除映射声明。

      重要

      如果堆栈未使用映射中的值,则无法更新映射本身。您需要包含添加、修改或删除资源的更改。例如,您可以添加或修改资源的元数据属性。如果您更新了您的堆栈正在使用的映射值,则无需进行任何其他更改就能启动更新。

    • 添加、修改或删除条件声明。

      重要

      您不能更新条件本身。您只能在包含添加、修改或删除资源的更改时更新条件。例如,您可以添加或修改资源的元数据属性。

    • 添加、修改或删除输出值声明。

    一些资源或属性可能在属性值或这些值的更改方面有一些限制条件。例如,对 AWS::RDS::DBInstance 资源的 AllocatedStorage 属性的更改必须大于当前设置。如果为更新指定的值不满足这些约束,该资源的更新将失败。有关 AllocatedStorage 更改的特定约束,请参阅 ModifyDBInstance

    资源更新可能对影响其他资源的属性。如果您在模板中使用 RefFn::GetAtt 函数将某个已更新资源的属性指定为另一个资源属性值的一部分,则 CloudFormation 还将更新包含对该已更改属性的引用的资源。例如,假设您更新了 AWS::RDS::DBInstance 资源的 MasterUsername 属性,并且您的 AWS::AutoScaling::LaunchConfiguration 资源的 UserData 属性使用 Ref 函数包含了对数据库实例名称的引用,则 CloudFormation 将使用该新名称重新创建数据库实例,同时更新 LaunchConfiguration 资源。

  4. 要检查模板中是否存在语法错误,请从 Amazon CloudFormation Designer 工具栏中选择 Validate template(验证模板)( )。

    查看并修复 Messages 窗格中的所有错误,然后再次验证模板。如果未看到任何错误,则说明您的模板语法上是有效的。

  5. 在 Amazon CloudFormation Designer 工具栏中,选择 File(文件)菜单( ),然后选择 Save(保存),以将模板保存到 S3 桶或本地。

  6. 使用已修改的模板直接更新堆栈使用更改集更新堆栈

获取和更新堆栈模板 (CLI)

  1. 要获取要更新的堆栈的模板,请使用 get-template CLI 命令。

  2. 将模板复制并粘贴到文本文件中,进行修改,然后保存它。 复制模板。该命令将模板括在引号中,但是不得复制模板两端的引号。模板本身以左括号开始,以右括号结束。指定对本文件中堆栈资源的更改。

  3. 使用已修改的模板直接更新堆栈使用更改集更新堆栈