

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 更新您的堆疊範本
<a name="using-cfn-updating-stacks-get-template"></a>

要修改 CloudFormation 堆疊中的資源或屬性，您必須更新堆疊的範本。以該堆疊的現有範本為基礎，對其進行變更。如果您要在原始程式碼控制系統中管理範本，則請將該範本的複本做為起點。不然，您亦可從 CloudFormation 取得範本的複本。

若您僅希望變更堆疊的參數或設定 (例如：堆疊的 Amazon SNS 主題)，可以無需複本，重複使用現有堆疊範本。

您可以使用文字編輯器或 [Infrastructure Composer](infrastructure-composer-for-cloudformation.md) 來更新 CloudFormation 堆疊範本。

**透過 Infrastructure Composer 更新現有堆疊範本**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在**堆疊**頁面中，選擇要更新的堆疊名稱。

1. 選擇**範本**索引標籤，再選擇 **Infrastructure Composer 中的檢視**。

   CloudFormation 在 Infrastructure Composer 中開啟範本。

1. 使用下列方法之一更新您的範本：
   + **畫布**介面：在這裡，您可以從**資源**面板中拖放。按兩下卡片以開啟**資源屬性**面板來設定資源。根據需要連接資源。如需使用**畫布**介面的詳細說明，請參閱[如何在 AWS Infrastructure Composer中編寫](https://docs.aws.amazon.com/infrastructure-composer/latest/dg/using-composer-basics.html)。
   + **範本**介面：從**畫布**切換到**範本**介面。對範本程式碼進行內嵌更新。根據需要在 JSON 和 YAML 格式之間切換。

1. 選擇**驗證**，檢查範本中的語法錯誤。

1. 準備好將變更匯出至 CloudFormation 時，選擇**更新範本**。

**使用 更新現有的堆疊範本 AWS CLI**

1. 如需取得要更新的堆疊範本，請採用 [get-template](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/get-template.html) CLI 命令。

1. 複製範本並將其貼至文字檔案，進行修改後加以儲存。請務必*僅*複製範本。該命令會以引號括住範本，請勿複製括住該範本的引號。範本本身會以左大括號開始，並以右大括號結束。您可以在此檔案中指定要進行的堆疊資源變更。

變更範本時，請注意下列事項：
+ 在資源不支援更新的情況下，您將無法新增、修改或刪除該資源所使用的參數。
+ 對於大多數資源而言，變更資源的邏輯名稱相當於刪除該資源，且會用新資源取而代之。如果任何其他資源與重新命名的資源之間有依存關係，則需一併進行更新，亦可能會遭取代。為了啟動更新作業，您必須更新其他資源的屬性，而不是只變更邏輯名稱。
+ 部分資源對特定屬性的可設定數值有約束條件。例如，變更 RDS 資料庫執行個體的 `AllocatedStorage` 屬性時，新數值必須大於目前數值。若您的更新違反這些規則，該部分操作將會失敗。
+ 更新一項資源也可能影響參考它的其他資源。若您使用 [`Ref` 函數](resources-section-structure.md#resource-properties-ref) 或 [`Fn::GetAtt` 函數](resources-section-structure.md#resource-properties-getatt) 等函數，根據另一項資源設定某個屬性，則當被參考的資源變更時，CloudFormation 也會更新參考它的資源。
+ 如需有關更新特定資源屬性效果的資訊，請參閱 [AWS 資源和屬性類型參考](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html)。更新各個屬性將產生下列其中一種效果：
  + *更新要求*：[不中斷](using-cfn-updating-stacks-update-behaviors.md#update-no-interrupt)
  + *更新要求*：[部分中斷](using-cfn-updating-stacks-update-behaviors.md#update-some-interrupt)
  + *更新要求*：[替換](using-cfn-updating-stacks-update-behaviors.md#update-replacement)
+ 您可以使用 [validate-template](service_code_examples.md#validate-template-sdk) CLI 命令，或在主控台上指定範本，驗證範本的 JSON 或 YAML 語法。主控台會自動執行驗證。但這些方法僅驗證您範本的語法，而不會驗證您為資源指定的屬性數值是否對該資源有效。如需更複雜的驗證或檢查最佳實務，也可以使用其他工具，如 [CloudFormation Linter (cfn-lint)](https://github.com/aws-cloudformation/cfn-lint) 和 [CloudFormation Rain (rain fmt)](https://github.com/aws-cloudformation/rain)。

**注意**  
有時 CloudFormation 會禁止您嘗試進行的某些變更，並告知您該變更不被允許。然而在預設情況下，CloudFormation 會採隨機順序建立與更新資源，因此系統可能以非同步方式顯示該訊息。