CloudFormation 運作方式 - AWS CloudFormation

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

CloudFormation 運作方式

本主題描述了 CloudFormation 如何使用 ,並向您介紹在使用時需要了解的關鍵概念。

重要概念

使用 時 CloudFormation,您會使用 範本堆疊 。您可以建立範本來描述 AWS 資源及其屬性。每當您建立堆疊時, 會 CloudFormation 佈建範本中描述的資源。

範本

CloudFormation 範本是 YAML JSON或 格式的文字檔案。您可以使用任何副檔名來儲存這些檔案,例如 .json.template.yaml.txt。 CloudFormation 使用這些範本做為建置 AWS 資源的藍圖。例如,在範本中,您可以描述 Amazon EC2執行個體,例如執行個體類型、AMIID、區塊裝置映射及其 Amazon EC2金鑰對名稱。每當您建立堆疊時,您也會指定範本, CloudFormation 用來建立範本中描述的任何內容。

例如,如果您使用下列範本建立堆疊, 會使用 ami-0ff8a91507f77f867 AMI ID、執行個體類型、testkey金鑰對名稱和 Amazon EBS磁碟區 CloudFormation 佈建t2.micro執行個體。

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "A sample template", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "t2.micro", "KeyName": "testkey", "BlockDeviceMappings": [ { "DeviceName": "/dev/sdm", "Ebs": { "VolumeType": "io1", "Iops": 200, "DeleteOnTermination": false, "VolumeSize": 20 } } ] } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Description: A sample template Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro KeyName: testkey BlockDeviceMappings: - DeviceName: /dev/sdm Ebs: VolumeType: io1 Iops: 200 DeleteOnTermination: false VolumeSize: 20

您也可以在單一範本中指定多個資源並加以設定,讓這些資源共同搭配運作。例如,您可以修改先前的範本以包含彈性 IP 地址 (EIP),並將其與 Amazon EC2執行個體建立關聯,如下列範例所示:

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "A sample template", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "t2.micro", "KeyName": "testkey", "BlockDeviceMappings": [ { "DeviceName": "/dev/sdm", "Ebs": { "VolumeType": "io1", "Iops": 200, "DeleteOnTermination": false, "VolumeSize": 20 } } ] } }, "MyEIP": { "Type": "AWS::EC2::EIP", "Properties": { "InstanceId": { "Ref": "MyEC2Instance" } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Description: A sample template Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro KeyName: testkey BlockDeviceMappings: - DeviceName: /dev/sdm Ebs: VolumeType: io1 Iops: 200 DeleteOnTermination: false VolumeSize: 20 MyEIP: Type: 'AWS::EC2::EIP' Properties: InstanceId: !Ref MyEC2Instance

先前的範本以單一 Amazon EC2執行個體為中心;不過, CloudFormation範本具有其他功能,可讓您用來建置複雜的資源集,並在多個內容中重複使用這些範本。例如,您可以新增輸入參數,其值會在建立 CloudFormation 堆疊時指定。換言之,您不需等到建立範本期間才指定數值,建立堆疊期間即可指定執行個體類型等值,藉此在不同情況下更輕鬆地重複使用範本。

如需詳細資訊,請參閱使用 CloudFormation 範本

堆疊

使用 時 CloudFormation,您會以稱為堆疊的單一單位管理相關資源。意即您能夠建立、更新和刪除堆疊,藉此建立、更新並刪除資源集合。堆疊中的所有資源都由堆疊的 CloudFormation 範本定義。假設您建立了範本,其中包含 Auto Scaling 群組、Elastic Load Balancing 負載平衡器和 Amazon Relational Database Service (Amazon RDS) 資料庫執行個體。若要建立這些資源,您可以透過提交您建立的範本來建立堆疊,並為您 CloudFormation 佈建所有這些資源。您可以使用 CloudFormation 主控台 API或 來使用堆疊AWS CLI

如需詳細資訊,請參閱管理 AWS 資源作為一個單元 AWS CloudFormation 堆疊

變更集

如果您需要變更堆疊內的執行中資源,請更新堆疊。在變更資源之前,您可以產生變更集以列出請求變更的摘要。藉由變更集,您可以先掌握該變更對執行中資源 (特別是重要資源) 造成的影響,再實行變更作業。

例如,如果您變更 Amazon RDS 資料庫執行個體的名稱, CloudFormation 將建立新的資料庫並刪除舊資料庫。除非您已備份舊資料庫中的資料,否則這些資料均會遺失。如果您有產生變更集,即可發現該變更作業會導致資料庫遭取代,便能在更新堆疊前進行相應的考量。

如需詳細資訊,請參閱使用變更集更新 CloudFormation 堆疊

CloudFormation 運作方式

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

CloudFormation 進行的所有呼叫都會由您的範本宣告。例如,假設您有一個描述EC2執行個體t2.micro類型的範本。當您使用該範本建立堆疊時, 會 CloudFormation 呼叫 Amazon EC2建立執行個體,API並將執行個體類型指定為 t2.micro。下圖總結了建立堆疊的 CloudFormation 工作流程。

在本機或儲存貯體中儲存的已建立或現有範本,用於建立堆疊。
  1. 使用 基礎設施編寫器或您自己的文字編輯器,以 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. 透過指定範本檔案的位置來建立 CloudFormation 堆疊,例如本機電腦上的路徑或 Amazon S3URL。若該範本包含參數,您可以在建立堆疊期間指定輸入值。透過參數,您可以將值傳入範本,因此您每次建立堆疊時都可以自訂資源。

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

    注意

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

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

CloudFormation 透過呼叫範本中描述 AWS 的服務來佈建和設定資源。

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

透過變更集更新堆疊

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

使用變更集在執行變更集以更新堆疊之前檢視修改值的範本。
重要

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

  1. 您可以使用 基礎設施編寫器或文字編輯器來修改 CloudFormation 堆疊範本。例如,如果您想要變更執行個體的EC2執行個體類型,您可以變更原始堆疊範本中InstanceType屬性的值。如需詳細資訊,請參閱更新堆疊範本

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

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

    如需建立變更集的詳細資訊,請參閱 使用變更集更新 CloudFormation 堆疊

    注意

    如果您指定儲存在本機電腦上的範本, CloudFormation 會自動將範本上傳到 中的 S3 儲存貯體 AWS 帳戶。

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

    重要

    變更集並不會指示系統是否能成功執行堆疊更新作業。例如,變更集不會檢查您是否將超過帳戶配額、您是否正在更新不支援更新的資源,或者您是否沒有足夠的許可來修改資源,這可能會導致堆疊更新失敗。

  5. 啟動您要套用至堆疊的變更集。僅更新您修改的資源,並發出堆疊已成功更新的訊號,以 CloudFormation 更新堆疊。如果堆疊更新失敗, CloudFormation 會復原變更,將堆疊還原至最後已知的運作狀態。

刪除堆疊

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

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

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