本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
CloudFormation 如何運作
本主題說明 CloudFormation 的運作方式,並介紹使用 CloudFormation 時需要了解的重要概念。
重要概念
當您使用 CloudFormation 時,即可搭配範本與堆疊使用。您可以建立範本來描述 AWS 資源及其屬性。每當建立堆疊時,CloudFormation 即會佈建範本中所述的資源。
範本
CloudFormation 範本屬於 YAMLN 或 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 範本會描述所需的資源及其設定。使用 Infrastructure Composer 來視覺化和驗證範本。這可協助確保範本結構正確且沒有語法錯誤。如需詳細資訊,請參閱使用 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 會在您的範本上執行部署前驗證。這會檢查是否有常見的錯誤,例如無效的屬性語法和資源名稱衝突。如果驗證失敗,操作會在建立任何資源之前停止。驗證會在所有建立堆疊、更新堆疊和建立變更集操作上自動執行。若要略過驗證,請使用 DisableValidation 參數。如需詳細資訊,請參閱驗證堆疊部署。
建立完所有資源之後,CloudFormation 即會回報堆疊建立完成。接著,您便可以開始使用堆疊中的資源。如果堆疊建立失敗,則 CloudFormation 會刪除建立的資源來復原變更。
快速模式
若要在開發期間加快堆疊操作,請使用快速模式。快速模式會在 CloudFormation 套用資源組態後立即完成堆疊操作,而無需等待資源完全穩定。如需詳細資訊,請參閱快速模式。
透過變更集更新堆疊
當您需要更新堆疊的資源時,即可修改堆疊的範本,並不需要建立新堆疊和刪除舊堆疊。若要更新堆疊,請透過提交原始堆疊範本的修改版本、不同的輸入參數值或同時提交兩者來建立變更集。CloudFormation 會比較經修改範本與原始範本,並產生變更集。而該變更集會列出建議的變更。檢閱變更之後,您可以啟動該變更集以更新堆疊,或建立新的變更集。下圖概述了更新堆疊的工作流程。
若要使用變更集來更新堆疊
-
可以使用 Infrastructure Composer 或文字編輯器來修改 CloudFormation 堆疊範本。如需詳細資訊,請參閱更新您的堆疊範本。
更新範本時,請謹記更新可能會導致中斷。根據更新中的資源與屬性,更新作業可能會中斷,甚至是取代現有資源。如需詳細資訊,請參閱了解更新堆疊資源的行為。
-
在本機或 S3 儲存貯體中儲存 CloudFormation 範本。
-
透過指定要更新的堆疊與修改後範本的位置 (如本機電腦上的路徑或 Amazon S3 URL),即可建立變更集。如需建立變更集的詳細資訊,請參閱 透過變更集更新 CloudFormation 堆疊。
注意
如果您指定的範本存放於本機電腦上,CloudFormation 會自動將範本上傳至 AWS 帳戶中的 S3 儲存貯體。
-
檢視變更集,藉此檢查 CloudFormation 是否會執行預期的變更。例如,檢查 CloudFormation 是否會取代任何重要的堆疊資源。您可以依需求建立無限個變更集,直到涵蓋所需的變更為止。
-
啟動要套用至堆疊的變更集。CloudFormation 透過僅更新經修改的資源來更新堆疊,並發出已成功更新堆疊的訊號。CloudFormation 在堆疊更新失敗時則會復原變更,使堆疊還原至上次已知的運作狀態。
CloudFormation 入門方法
若要使用主控台建立 hello world CloudFormation 堆疊,請參閱 建立您的第一個堆疊。
如需指導性學習,請嘗試 CloudFormation入門