CloudFormation 範本具有以下幾個優點:
- 遵循熟悉的格式:CloudFormation 範本只是一個 JSON (JavaScript Object Notation) 或 YAML 格式的文字檔,描述執行某個應用程式或服務所需的 AWS 基礎設施以及它們之間的互連關係。
- 管理關聯性:範本可簡潔地擷取資源關聯性,例如,EC2 執行個體必須與 Elastic Load Balancing 負載平衡器相關聯,或者 EBS 磁碟區必須與其連接的執行個體位於相同的 EC2 可用區域。
- 可重覆使用:使用範本參數可讓單一範本用於具有不同組態值的多個基礎設施部署,例如,要為應用程式部署幾個執行個體。
- 獲得有用的回饋:範本也提供輸出屬性,可將部署結果或組態資訊傳回給使用者。例如,在執行個體化時,範本可提供 Elastic Load Balancing 端點的 URL,客戶應該使用此 URL 連接到剛執行個體化的應用程式。
- 避免衝突:範本中的所有 AWS 資源都是以邏輯名稱加以識別,可從一個範本建立多個堆疊,不用擔心 AWS 資源之間的命名衝突。
- 即寫即用:可使用任何方法啟動堆疊,無需事先使用 AWS CloudFormation 註冊範本。
- 視覺化堆疊:CloudFormation Designer 讓您透過圖表以視覺化方式呈現範本。您可以輕鬆地檢視 AWS 資源和其關聯,並編排其版面配置,讓圖表符合您的需求。您可以使用拖放界面和整合的 JSON 編輯器編輯範本。您對圖表所做的修改會自動修改範本的 JSON。
- 查詢資源:AWS CloudFormation 會保留一份堆疊範本的副本,因此您可以使用 AWS 管理主控台、命令列工具或 API,查詢堆疊建立期間套用的精確資源組態。
- 自動化:您可以選擇使用程式設計語言或所選工具自動產生範本,也可以選擇使用 CloudFormation API、AWS 開發套件或 AWS CLI 從範本自動建立堆疊。
範本具有下列高階 JSON 結構:
{
"Description" : "範本使用方法的文字描述",
"Parameters": {
// 用於根據每個部署自訂範本的一組輸入值
},
"Resources" : {
// 一組 AWS 資源及其之間的關聯性
},
"Outputs" : {
// 堆疊建立者可以看到的一組值
},
"AWSTemplateFormatVersion" : "2010-09-09"
}
以下範本是說明如何建立 EC2 執行個體的簡單範例:
{
"Description" : "建立執行 Amazon Linux 32 位 AMI 的 EC2 執行個體。",
"Parameters" : {
"KeyPair" : {
"Description" : "允許 SSH 存取此執行個體的 EC2 金鑰對",
"Type" : "String"
}
},
"Resources" : {
"Ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"KeyName" : { "Ref" : "KeyPair" },
"ImageId" : "ami-3b355a52"
}
}
},
"Outputs" : {
"InstanceId" : {
"Description" : "新建立的 EC2 執行個體的執行個體 ID",
"Value" : {
"Ref" : "Ec2Instance"
}
}
},
"AWSTemplateFormatVersion" : "2010-09-09"
}
堆疊是執行個體化範本時所產生的資源集合。您可以將範本和任何必要參數提供給 AWS CloudFormation 以建立堆疊。AWS CloudFormation 會根據範本和在範本中指定的任何相依項,決定需要建立的 AWS 資源及其順序。
若要更新堆疊,所提供的範本需具有堆疊中所有資源的所需組態。您可以修改堆疊中現有資源的屬性,以反應環境中的變更或新應用程式的要求。例如,您可以變更 AWS CloudWatch 警示的警示閾值,或更新在堆疊中執行個體上執行的 AMI。AWS CloudFormation 會透過堆疊中的不同資源回復這些變更。在許多情況下,進行變更不會影響您執行中的應用程式。但是,如果無法進行動態變更 (例如,在 EC2 執行個體上更新 AMI),AWS CloudFormation 將建立新資源並將其重新接入堆疊,並在服務確定完全更新成功後,刪除舊資源。
AWS CloudFormation 將建立或更新完整的堆疊。如果無法建立或更新完整的堆疊,AWS CloudFormation 會將它回復。為了偵錯用途,可以停用轉返操作,之後再手動重試堆疊建立或更新。
您也可以使用 AWS CloudFormation Designer 建立或修改堆疊的範本,然後將範本提交給 AWS CloudFormation 以建立或更新堆疊。您可以在 AWS 管理主控台使用 AWS CloudFormation Designer。
您可以透過 AWS 管理主控台輕鬆存取 AWS CloudFormation,使用這個以 Web 為基礎的點選式界面部署和管理堆疊。只需幾個簡單步驟,您就能在 AWS 管理主控台建立、刪除和更新應用程式。
AWS CloudFormation Designer 是提供拖放界面的視覺化工具,可用於將資源新增至範本。CloudFormation Designer 讓您能夠將更多時間用於設計 AWS 基礎設施,並減少手動撰寫範本程式碼的時間。例如,當您新增或移除資源時,CloudFormation Designer 會自動修改基礎 JSON。您也可以使用整合的文字編輯器來指定範本詳細資訊,例如資源屬性值和輸入參數。請參閱文件進一步了解相關資訊。
AWS CloudFormation Designer 是 AWS CloudFormation 主控台的一部分,您必須以 AWS 登入資料登入才能使用此工具。若要使用 AWS CloudFormation Designer,請瀏覽 https://console.aws.amazon.com/cloudformation/designer。以下案例重點說明 AWS CloudFormation Designer 的一些功能。
視覺化範本資源
透過剖析 JSON 格式的文字檔來了解範本中的資源及其之間的關係並不容易。您可以利用 AWS CloudFormation Designer 開啟任何有效的 AWS CloudFormation 範本,而此工具會透過圖表以視覺化方式呈現所有範本資源。您可以輕鬆地檢視範本資源及其關聯,而不必讀取 JSON。AWS CloudFormation Designer 包含 JSON 文字編輯器,因此您可以在需要時隨時檢視範本詳細資訊。
簡化範本的編寫
當您在文字編輯器使用範本資源時,必須手動編輯 JSON,這種方式不僅單調乏味且極易出錯。在 AWS CloudFormation Designer 中,您可以透過類似使用圖表的方式來使用資源。您可以拖放新資源,將它們新增至範本,然後拖曳資源之間的關聯以建立關係。AWS CloudFormation Designer 會自動修改 JSON。除了視覺化資源之外,整合的 JSON 文字編輯器還提供資源屬性名稱的自動完成功能。利用 AWS CloudFormation Designer,您可以花費較少的手動編寫範本程式碼時間,而將更多時間用來設計 AWS 基礎設施。
AWS CloudFormation 也提供一組操作方便且非常靈活的簡易 API。如需可用 AWS CloudFormation API 的完整清單,請參閱 AWS CloudFormation API Reference Guide。以下為一些最常用的 API 及其功能:
- CreateStack:開始建立新堆疊。呼叫的輸入參數包括堆疊名稱和來源範本的檔名 (或 Amazon S3 URL)。如果建立堆疊的程序順利完成,堆疊將為 CREATE_COMPLETE 狀態。如果堆疊建立失敗,AWS CloudFormation 會刪除之前建立的資源,除非使用者指定旗標保留這些元素,供偵錯之用。
- ListStacks:列出您帳戶中的所有堆疊。可用於檢視堆疊集及其目前狀態,例如,正在建立或更新堆疊。
- ListStackResources:列出建立堆疊時建立的所有 AWS 資源名稱和識別符。除了提供資訊給您,此呼叫還可供 AWS CloudFormation 感知應用程式使用,以了解其環境。
- DescribeStackEvents:列出 AWS CloudFormation 針對堆疊產生的所有操作和事件,可讓您查看建立或刪除的進行狀態。
- UpdateStack:針對現有堆疊開始更新程序。呼叫的輸入參數包括堆疊名稱和更新範本的檔名 (或 Amazon S3 URL)。如果更新堆疊的程序順利完成,堆疊將為 UPDATE_COMPLETE 狀態。如果堆疊更新失敗,AWS CloudFormation 將回復所進行的任何資源變更,以便堆疊返回原始範本中所述的狀態。
還可透過 AWS 開發套件和 AWS CLI 使用 AWS CloudFormation。
AWS CloudFormation 已經與 Amazon Simple Notification Service (Amazon SNS) 完成整合,可讓您在建立、更新和刪除堆疊的過程中接收通知。除了提供狀態給您,這也可讓其他程式注意到 CloudFormation 中的事件並回應,甚至參與堆疊組態程序。
AWS CloudFormation 範本的設計是為了讓您善用現有的 AWS 經驗。每個資源都有一組參數,參數名稱與透過其原生 API 建立資源時所使用的名稱完全相同。下列範本片段說明如何定義 Amazon EBS 磁碟區。範本中磁碟區的邏輯名稱為 "myVolume",類型為 "AWS::EC2::Volume"。如果您之前使用過 EBS 磁碟區,那麼您對這些屬性應該很熟悉。
"myVolume" : {
"Type" : "AWS::EC2::Volume",
"Properties" : {
"Size" : "10",
"SnapshotId" : "snap-7b8fd361",
"AvailabilityZone" : "us-east-1a"
}
}
AWS CloudFormation 提供一些可部署到 EC2 執行個體的協助程式指令碼。這些指令碼能讓您輕鬆地從堆疊讀取資源中繼資料並用於設定應用程式、將套件和檔案部署到範本中所列的執行個體,以及對組態變更或應用程式更新之類的堆疊更新做出反應。
下列是可用的指令碼:
- cfn-get-metadata:在範本中擷取您的資源所連接的中繼資料。
- cfn-init:下載並安裝範本中所述的套件和檔案。
- cfn-signal:向堆疊建立工作流程發出信號,表示您的應用程式已啟動和執行,並準備好接受流量。
- cfn-hup:監聽堆疊更新的協助程式,透過 AWS 主控台、命令列工具或直接透過 API 啟動,並執行應用程式特定的勾點以反應這些變更。
您可以單獨使用 CloudFormation 指令碼,也可以結合 CloudInit 一起使用,CloudInit 是 Amazon Linux AMI 和一些其他 Linux AMI 上提供的功能。有關引導操作應用程式和更新組態的詳細資訊,請參閱 AWS CloudFormation 開發人員資源。
使用本服務需遵守 Amazon Web Services 客戶協議。