如何 AWS CloudFormation 工作? - AWS CloudFormation

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

如何 AWS CloudFormation 工作?

建立堆疊時,會 AWS CloudFormation 對基礎服務呼叫 AWS 進行佈建和設定資源。 CloudFormation 只能執行您有權執行的動作。例如,若要使用建立 EC2 執行個體 CloudFormation,您需要許可才能建立執行個體。當您刪除具備執行個體的堆疊時,必須擁有類似於終止執行個體的許可。您可以使用 AWS Identity and Access Management (IAM) 來管理許可。

發出的 CloudFormation 呼叫全部由您的模板聲明。例如,假設範本可以說明執行個體類型為 t2.micro 的 EC2 執行個體;當您使用該範本建立堆疊時,請 CloudFormation 呼叫 Amazon EC2 建立執行個體 API,並將執行個體類型指定為t2.micro。下圖概述了建立堆疊的 CloudFormation 工作流程。

  1. 使用設AWS CloudFormation 計工具或您自己的文字編輯器,建立或修改 JSON 或 YAML 格式的 CloudFormation 範本。除此之外,您還可以選擇使用系統提供的範本。 CloudFormation 範本說明您想要的資源及其設定。以建立 EC2 執行個體為例,您的範本可以宣告 Amazon EC2 執行個體並描述其屬性;如下列範例所示:

    範例 JSON
    { "AWSTemplateFormatVersion": "2010-09-09", "Description": "A simple EC2 instance", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "t2.micro" } } } }
    範例 YAML
    AWSTemplateFormatVersion: 2010-09-09 Description: A simple EC2 instance Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro
  2. 將範本儲存在本機或儲存 Amazon S3 貯體中。建立範本時,請採用 .json.yaml.txt 等副檔名儲存該範本。

  3. 透過指定範本檔案的位置 (例如本機電腦上的路徑或 Amazon S3 URL) 來建立 CloudFormation 堆疊。若該範本包含參數,您可以在建立堆疊期間指定輸入值。透過參數,您可以將值傳入範本,因此您每次建立堆疊時都可以自訂資源。

    您可以使用 CloudFormation 主控台CreateStackAPI 作業或create-stack AWS CLI 命令來建立堆疊。

    注意

    如果您指定存放在本機的範本檔案,請將其 CloudFormation 上傳到 AWS 帳戶中的 S3 儲存貯體。 CloudFormation 會為您上傳範本檔案的每個區域建立值區。 AWS 帳戶中具有 Amazon Simple Storage Service (Amazon S3) 許可的任何人都可以存取這些儲存貯體。如果由建立的值區 CloudFormation 已存在,則會將範本新增至該值區。

    您可以使用自己的儲存貯體,並手動上傳範本至 Amazon S3 以管理其許可。然後在您每次建立或更新堆疊時,指定範本檔案的 Amazon S3 URL。

CloudFormation 通過對模板中描述的 AWS 服務進行調用來佈建和配置資源。

建立完所有資源之後, CloudFormation 報告您的堆疊已建立。接著,您便可以開始使用堆疊中的資源。如果堆疊建立失敗,請刪除所建立的資源來回 CloudFormation 復變更。

透過變更集更新堆疊

當您需要更新堆疊的資源時,即可修改堆疊的範本,並不需要建立新堆疊和刪除舊堆疊。若要更新堆疊,請提交原始堆疊範本的修改版本、不同的輸入參數值或兩者,以建立變更集。 CloudFormation 將修改的樣板與原始樣板進行比較,並產生變更集。而該變更集會列出建議的變更。檢閱變更之後,您可以啟動該變更集以更新堆疊,或建立新的變更集。下圖概述了更新堆疊的工作流程。

重要

更新可能會導致作業中斷。根據更新中的資源與屬性,更新作業可能會中斷,甚至是取代現有資源。如需詳細資訊,請參閱 AWS CloudFormation 堆疊更新

  1. 您可以使用 AWS CloudFormation Designer 或文字編輯器來修改 CloudFormation 堆疊範本。舉例來說,您可以更改原始堆疊範本中的 InstanceType 屬性值,進而變更 EC2 執行個體的執行個體類型。

    如需詳細資訊,請參閱 修改堆疊範本

  2. 將 CloudFormation 範本儲存在本機或 S3 儲存貯體中。

  3. 透過指定要更新的堆疊與修改後範本的位置 (如本機電腦上的路徑或 Amazon S3 URL),即可建立變更集。若該範本包含參數,您可以在建立變更集期間指定值。

    如需建立變更集的詳細資訊,請參閱 透過變更集更新堆疊

    注意

    如果您指定存放在本機電腦上的範本, CloudFormation會自動將範本上傳到 AWS 帳戶.

  4. 檢視要檢查的變更集 CloudFormation ,以執行您預期的變更。例如,檢查是否 CloudFormation 會取代任何重要的堆疊資源。您可以依需求建立無限個變更集,直到涵蓋所需的變更為止。

    重要

    變更集並不會指示系統是否能成功執行堆疊更新作業。例如,變更集並不會檢查是否超過帳戶配額、更新中的資源是否不支援更新,或者具備的許可是否不足以修改資源,上述所有情況都可能導致堆疊更新失敗。

  5. 啟動您要套用至堆疊的變更集。 CloudFormation 通過僅更新您修改的資源來更新您的堆棧,並表示您的堆棧已成功更新。如果堆疊更新失敗,請回 CloudFormation 復變更,將堆疊還原到上次已知的工作狀態。

刪除堆疊

當您刪除堆疊時,您可以指定要刪除的堆疊,並 CloudFormation 刪除該堆疊中的所有資源。您可以使用 CloudFormation 主控台DeleteStackAPI 作業或delete-stack AWS CLI 命令刪除堆疊。

如果您想刪除堆疊但仍保有其中部分資源,則可以透過 deletion policy (刪除政策) 來保留這些資源。

刪除所有資源後,表 CloudFormation 示您的堆棧已成功刪除。如果 CloudFormation 無法刪除資源,則不會刪除堆疊。任何尚未刪除的資源皆會保持不變,直到您可以成功刪除堆疊為止。

其他資源

  • 如需建立 CloudFormation 樣板的更多資訊,請參閱範本剖析

  • 如需建立、更新或刪除堆疊的詳細資訊,請參閱使用堆疊