本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
CloudFormation 的運作方式
本主題說明 CloudFormation 的運作方式,並向您介紹使用 CloudFormation 時需要了解的重要概念。
重要概念
當您使用 CloudFormation 時,您會使用 範本和堆疊。您可以建立範本來描述 AWS 資源及其屬性。每當建立堆疊時,CloudFormation 即會佈建範本中所述的資源。
範本
CloudFormation 範本是 YAML 或 JSON 格式的文字檔案。您可以用任何副檔名 (如 .yaml
、.json
、.template
或 .txt
) 來儲存這些檔案。CloudFormation 使用這些範本做為建置 AWS 資源的藍圖。舉例來說,您可以在範本中說明 Amazon EC2 執行個體的執行個體類型、AMI ID、區塊型裝置映射與 Amazon EC2 金鑰對名稱等等。您在建立堆疊時還可以指定範本,讓 CloudFormation 能用來建立範本中所述的內容。
假若您採用下方範本建立堆疊,則 CloudFormation 在佈建執行個體時,會使用 ami-0ff8a91507f77f867
AMI ID、t2.micro
執行個體類型、testkey
金鑰對名稱與 Amazon EBS 磁碟區。
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
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 } } ] } } } }
您也可以在單一範本中指定多個資源並加以設定,讓這些資源共同搭配運作。例如,您可以修改先前的範本以包括彈性 IP 地址 (EIP),並將其與 Amazon EC2 執行個體相關聯,如以下範例所示:
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
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" } } } } }
儘管先前的範本是以單一 Amazon EC2 執行個體為中心,但 CloudFormation 範本還有提供其他的功能,讓您可以用來建構複雜的資源集,並在多種情況下重複使用這些範本。舉例來說,您可以新增輸入參數,其為建立 CloudFormation 堆疊時所指定的值。換言之,您不需等到建立範本期間才指定數值,建立堆疊期間即可指定執行個體類型等值,藉此在不同情況下更輕鬆地重複使用範本。
堆疊
透過 CloudFormation,您可以將相關資源視為單一單位進行管理,該單位稱為「堆疊」;意即您能夠建立、更新和刪除堆疊,藉此建立、更新並刪除資源集合。堆疊中所有的資源都是由堆疊的 CloudFormation 範本定義。假設您想建立包含 Auto Scaling 群組、Elastic Load Balancing 負載平衡器及 Amazon Relational Database Service (Amazon RDS) 資料庫執行個體的範本。則請提交您建立的範本以進行堆疊建立程序,即可建立這些資源;而 CloudFormation 會為您佈建所有這些資源。
變更集
如果您需要變更堆疊內的執行中資源,請更新堆疊。在變更資源之前,您可以產生變更集以列出請求變更的摘要。藉由變更集,您可以先掌握該變更對執行中資源 (特別是重要資源) 造成的影響,再實行變更作業。
例如,若您變更 Amazon RDS 資料庫執行個體的名稱,CloudFormation 即會建立新的資料庫並刪除舊有資料庫。除非您已備份舊資料庫中的資料,否則這些資料均會遺失。如果您有產生變更集,即可發現該變更作業會導致資料庫遭取代,便能在更新堆疊前進行相應的考量。
CloudFormation 的運作方式
當您使用 CloudFormation 建立堆疊時,CloudFormation 會對 進行基礎服務呼叫, AWS 以佈建和設定範本中所述的資源。您需要許可才能建立這些資源。舉例來說,您必須擁有建立執行個體的許可,才能使用 CloudFormation 建立 EC2 執行個體。您可以使用 AWS Identity and Access Management(IAM) 管理這些許可。
您的範本會宣告所有 CloudFormation 進行的呼叫。例如,假設範本可以說明執行個體類型為 t2.micro
的 EC2 執行個體;則使用該範本建立堆疊時,CloudFormation 即會呼叫 Amazon EC2 來建立執行個體 API,並將執行個體類型指定為 t2.micro
。下圖概述了建立堆疊的 CloudFormation 工作流程。

建立 堆疊
-
使用文字編輯器以 YAML 或 JSON 格式建立 CloudFormation 範本。CloudFormation 範本會描述所需的資源及其設定。使用 基礎設施編寫器 視覺化和驗證您的範本。這可協助您確保範本結構正確且沒有語法錯誤。如需詳細資訊,請參閱使用 CloudFormation 範本。
-
在本機或 Amazon S3 儲存貯體中儲存範本。
-
透過指定範本檔案的位置 (如本機電腦上的路徑或 Amazon S3 URL) 建立 CloudFormation 堆疊。若該範本包含參數,您可以在建立堆疊期間指定輸入值。透過參數,您可以將值傳入範本,因此您每次建立堆疊時都可以自訂資源。
注意
如果您指定儲存在本機的範本檔案,CloudFormation 會將其上傳至您 AWS 帳戶中的 S3 儲存貯體。CloudFormation 會為您在其中上傳範本檔案的各個區域建立儲存貯體。擁有您 AWS 帳戶中 Amazon Simple Storage Service (Amazon S3) 許可的任何人都可以存取儲存貯體。如果 CloudFormation 已建立儲存貯體,則系統會將範本新增至該儲存貯體。
您可以使用自己的儲存貯體,並手動上傳範本至 Amazon S3 以管理其許可。然後在您每次建立或更新堆疊時,指定範本檔案的 Amazon S3 URL。
建立完所有資源之後,CloudFormation 即會回報堆疊建立完成。接著,您便可以開始使用堆疊中的資源。如果堆疊建立失敗,則 CloudFormation 會刪除建立的資源來復原變更。
若要使用主控台建立 hello world CloudFormation 堆疊,請參閱 建立您的第一個堆疊。
使用變更集更新堆疊
當您需要更新堆疊的資源時,即可修改堆疊的範本,並不需要建立新堆疊和刪除舊堆疊。若要更新堆疊,請透過提交原始堆疊範本的修改版本、不同的輸入參數值或同時提交兩者來建立變更集。CloudFormation 會比較經修改範本與原始範本,並產生變更集。而該變更集會列出建議的變更。檢閱變更之後,您可以啟動該變更集以更新堆疊,或建立新的變更集。下圖概述了更新堆疊的工作流程。

使用變更集更新堆疊
-
您可以使用 基礎設施編寫器或文字編輯器來修改 CloudFormation 堆疊範本。如需詳細資訊,請參閱更新您的堆疊範本。
當您更新範本時,請記住,更新可能會導致中斷。根據更新中的資源與屬性,更新作業可能會中斷,甚至是取代現有資源。如需詳細資訊,請參閱了解堆疊資源的更新行為。
-
在本機或 S3 儲存貯體中儲存 CloudFormation 範本。
-
透過指定要更新的堆疊與修改後範本的位置 (如本機電腦上的路徑或 Amazon S3 URL),即可建立變更集。如需建立變更集的詳細資訊,請參閱 使用變更集更新 CloudFormation 堆疊。
注意
如果您指定的範本存放於本機電腦上,CloudFormation 會自動將範本上傳至 AWS 帳戶中的 S3 儲存貯體。
-
檢視變更集,藉此檢查 CloudFormation 是否會執行預期的變更。例如,檢查 CloudFormation 是否會取代任何重要的堆疊資源。您可以依需求建立無限個變更集,直到涵蓋所需的變更為止。
-
啟動要套用至堆疊的變更集。CloudFormation 透過僅更新經修改的資源來更新堆疊,並發出已成功更新堆疊的訊號。CloudFormation 在堆疊更新失敗時則會復原變更,使堆疊還原至上次已知的運作狀態。