本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
逐步解說:建立您的第一個堆疊
在此演練中,您會使用範例範本建立 CloudFormation 堆疊,以建立資源在EC2執行個體上託管 WordPress 部落格網站。
範例範本會建立 EC2 instance. AWS CloudFormation is 免費,但 CloudFormation 建立 AWS 的資源為即時,不會在沙盒中執行。從啟動執行個體開始,直到您刪除堆疊並終止執行個體 (這是本逐步解說中的最終任務) 為止,您都會產生標準 Amazon EC2使用費,即使執行個體保持閒置。如需 Amazon EC2定價的詳細資訊,請參閱 Amazon EC2定價
步驟 1:檢視範本
您可以檢視JSON
範例範本會建立基本部落格,該 WordPress 部落格使用單一 Amazon EC2執行個體搭配本機 MySQL 資料庫進行儲存。它也會建立 Amazon EC2安全群組,以控制 Amazon EC2執行個體的防火牆設定。
範例範本包含六個頂層區段:AWSTemplateFormatVersion
、Description
、Parameters
、Mappings
、 Resources
和 Outputs
。不過,只需要 Resources
區段。
Resources
本節包含您要使用 範本建立 AWS 的資源定義。每個資源會分別列出,並指定建立該特定資源所需的屬性。下列資源宣告是EC2執行個體的組態,在此範例中具有邏輯名稱 WebServer
:
範例 JSON
"Resources" : { ... "WebServer": { "Type" : "AWS::EC2::Instance", "Properties": { "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, "InstanceType" : { "Ref" : "InstanceType" }, "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ], "KeyName" : { "Ref" : "KeyName" }, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -xe\n", "yum update -y aws-cfn-bootstrap\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource WebServer ", " --configsets wordpress_install ", " --region ", { "Ref" : "AWS::Region" }, "\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource WebServer ", " --region ", { "Ref" : "AWS::Region" }, "\n" ]]}} }, ... }, ... "WebServerSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable HTTP access via port 80 locked down to the load balancer + SSH access", "SecurityGroupIngress" : [ {"IpProtocol" : "tcp", "FromPort" : 80, "ToPort" : 80, "CidrIp" : "0.0.0.0/0"}, {"IpProtocol" : "tcp", "FromPort" : 22, "ToPort" : 22, "CidrIp" : { "Ref" : "SSHLocation"}} ] } }, ... },
如果您之前已建立EC2執行個體,則可以識別屬性,例如 InstanceType
、 ImageId
和 KeyName
,這些屬性決定執行個體的組態。資源宣告是一次指定所有組態設定的有效方式。當您將資源宣告放在範本中時,您可以透過使用範本建立堆疊,來建立及設定所有宣告的資源。建立使用相同範本的新堆疊,以啟動資源的相同組態。
資源宣告是以指定資源邏輯名稱的字串開頭。如您所見,邏輯名稱可用來參考範本內的資源。
您可以使用 Parameters
區段來宣告可在建立堆疊時傳遞至範本的值。參數是指定敏感資訊 (例如使用者名稱和密碼) 的有效方式,您不想要將此資訊存放在範本本身中。它也可讓您指定可能對您要部署之特定應用程式或組態唯一的資訊,例如網域名稱或執行個體類型。當您稍後在本節中建立 WordPress 堆疊時,您會在建立堆疊精靈的指定堆疊詳細資訊頁面上看到範本中宣告的參數集,您可以在建立堆疊之前指定參數。
範本中使用下列參數來指定EC2執行個體屬性中使用的值:
範例 JSON
"Parameters" : { ... "KeyName": { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances", "Type": "AWS::EC2::KeyPair::KeyName", "ConstraintDescription" : "must be the name of an existing EC2 KeyPair." }, "InstanceType" : { "Description" : "WebServer EC2 instance type", "Type" : "String", "Default" : "t2.small", "AllowedValues": [ "t1.micro", "t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "m3.medium", "m3.large", "m3.xlarge", "m3.2xlarge", "m4.large", "m4.xlarge", "m4.2xlarge", "m4.4xlarge", "m4.10xlarge", "c1.medium", "c1.xlarge", "c3.large", "c3.xlarge", "c3.2xlarge", "c3.4xlarge", "c3.8xlarge", "c4.large", "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge", "g2.2xlarge", "g2.8xlarge", "r3.large", "r3.xlarge", "r3.2xlarge", "r3.4xlarge", "r3.8xlarge", "i2.xlarge", "i2.2xlarge", "i2.4xlarge", "i2.8xlarge", "d2.xlarge", "d2.2xlarge", "d2.4xlarge", "d2.8xlarge", "hi1.4xlarge", "hs1.8xlarge", "cr1.8xlarge", "cc2.8xlarge", "cg1.4xlarge" ], "ConstraintDescription" : "must be a valid EC2 instance type." }, ...
在 WebServer
資源宣告中,您會看到使用 KeyName
參數指定的 KeyName
屬性:
範例 JSON
"WebServer" : { "Type": "AWS::EC2::Instance", "Properties": { "KeyName" : { "Ref" : "KeyName" }, ... } },
支架包含對Ref
內部函數的呼叫,並以 KeyName
作為其輸入。Ref
函數會傳回所參照物件的值。在此情況下,Ref
函數會將 KeyName
屬性設定為建立堆疊KeyName
時指定的值。
Ref
函數也可以將資源的屬性設定為另一個資源的值。例如,資源宣告 WebServer
包含下列屬性宣告:
範例 JSON
"WebServer" : { "Type": "AWS::EC2::Instance", "Properties": { ... "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ], ... } },
SecurityGroups
屬性會取得EC2安全群組的清單。Ref
函數具有 的輸入WebServerSecurityGroup
,這是範本中安全群組的邏輯名稱,並將 的名稱新增至 WebServerSecurityGroup
SecurityGroups
屬性。
在範本中,您也可以找到 Mappings
區段。您可以使用映射來宣告條件值,其評估方式類似於查詢表陳述式。範本使用映射為區域選取正確的 Amazon Machine Image (AMI),並為執行個體類型選取架構類型。 Outputs
定義由 describe-stacks CLI 命令傳回的自訂值,並在建立堆疊後,於 CloudFormation 主控台輸出索引標籤中定義自訂值。您可以使用輸出值,從堆疊中的資源傳回資訊,例如範本中建立URL的網站的 。我們將在CloudFormation 範本區段中進一步說明映射、輸出及其他範本的相關資訊。
目前對範本的說明已足夠。讓我們開始建立堆疊。
步驟 2:準備啟動堆疊
從範本建立堆疊之前,您必須確定範本所需的所有相依資源都可用。範本可以使用或參考範本本身中宣告的現有 AWS 資源和資源。 CloudFormation 謹慎檢查範本中資源的參考,並檢查現有資源的參考,以確保它們存在於您建立堆疊 AWS 區域 的 中。如果您的範本參考了不存在的相依資源,堆疊建立會失敗。
範例 WordPress 範本包含輸入參數 KeyName
,指定用於範本中宣告之 Amazon EC2執行個體的金鑰對。範本取決於從範本建立堆疊的使用者,以提供 KeyName
參數的有效 Amazon EC2金鑰對。如果您提供有效的金鑰對名稱,堆疊會成功建立。如果您未提供有效的金鑰對名稱,堆疊會復原。
建立堆疊之前,請確定您擁有有效的 Amazon EC2金鑰對並記錄金鑰對名稱。
若要查看您的金鑰對,請開啟 Amazon EC2主控台,然後在導覽窗格中選擇金鑰對。如果您沒有 Amazon EC2金鑰對,您必須在建立堆疊的相同 AWS 區域 位置建立金鑰對。如需建立金鑰對的相關資訊,請參閱 Amazon 使用者指南 中的為您的 Amazon EC2執行個體建立金鑰對。 EC2
步驟 3:建立堆疊
您將根據 建立堆疊 WordPress-1.0.0 先前討論的檔案。範本包含數個 AWS 資源,例如EC2執行個體。
若要建立 WordPress 堆疊
登入 AWS Management Console 並在 https://console.aws.amazon.com/cloudformation
開啟 AWS CloudFormation 主控台。 -
選擇 Create Stack (建立堆疊)。
-
在指定範本區段中,選取 Amazon S3 範本URL以輸入或貼上範本URL WordPress的 ,然後選擇下一步:
https://s3.us-west-2.amazonaws.com/cloudformation-templates-us-west-2/WordPress_Single_Instance.template
注意
CloudFormation 存放在 S3 儲存貯體中的範本必須可供建立堆疊的使用者存取。
-
在指定堆疊詳細資訊區段的堆疊名稱 欄位中,輸入一個名稱。在此範例中,使用
MyWPTestStack
。堆疊不可含有空格。 -
在參數區段中,您必須為所有沒有預設值的參數提供值,包括 DBUser、DBRootPassword、 DBPassword和 KeyName。在 KeyName欄位中,在您 AWS 區域 建立堆疊的相同位置輸入有效 Amazon EC2對的名稱。
-
選擇 Next (下一步)。
-
在此案例中,我們不會新增任何標籤。選擇 Next (下一步)。標籤 (也就是鍵/值對) 可以協助您識別堆疊。如需詳細資訊,請參閱設定堆疊選項。
-
檢閱堆疊的資訊。當您滿意設定時,請選擇 Submit (提交)。
您的堆疊可能需要幾分鐘時間來建立,但您可能並不想只是坐著枯等。如果您和我們一樣,您會想要知道堆疊建立的進度。
步驟 4:監控堆疊建立的進度
完成建立堆疊精靈之後, CloudFormation 開始建立範本中指定的資源。您的新堆疊 M yWPTestStack 會出現在CloudFormation主控台頂端的清單中。其狀態應為 CREATE_IN_PROGRESS。您可以透過檢視其事件來查看堆疊的詳細狀態。
檢視堆疊的事件
-
在 CloudFormation 主控台上,選取清單中的堆疊 M yWPTestStack。
-
在堆疊詳細資訊窗格中,選擇 Events (事件) 標籤。
主控台會每隔 60 秒自動重新整理事件清單,以包含最新的事件。
Events (事件) 標籤會顯示堆疊建立過程中的每個主要步驟,並依每個事件的時間排序,最新的事件放在最上方。
第一個事件 (位於事件清單的底部) 是開始堆疊建立程序:
2013-04-24 18:54 UTC-7 CREATE_IN_PROGRESS AWS::CloudFormation::Stack MyWPTestStack
User initiated
接下來是標記每個資源建立開始和完成的事件。例如,建立EC2執行個體會導致下列項目:
2013-04-24 18:59 UTC-7 CREATE_COMPLETE AWS::EC2::Instance...
2013-04-24 18:54 UTC-7 CREATE_IN_PROGRESS AWS::EC2::Instance...
當 CloudFormation 報告已開始建立資源時,會記錄 CREATE_IN_PROGRESS 事件。成功建立資源時,會記錄 CREATE_COMPLETE 事件。
CloudFormation 成功建立堆疊後,您會在事件索引標籤頂端看到下列事件:
2013-04-24 19:17 UTC-7 CREATE_COMPLETE AWS::CloudFormation::Stack
MyWPTestStack
如果 CloudFormation 無法建立資源,它會報告 CREATE_FAILED 事件,並依預設復原堆疊,並刪除任何已建立的資源。Status Reason (狀態原因) 欄會顯示導致失敗的問題。
步驟 5:使用您的堆疊資源
當堆疊 M yWPTest堆疊的狀態為 CREATE_COMPLETE、 CloudFormation 完成建立堆疊,而且您可以開始使用其資源。
範例 WordPress 堆疊會建立 WordPress 網站。您可以執行 WordPress 安裝指令碼來繼續 WordPress 設定。
若要完成 WordPress 安裝
-
在輸出索引標籤的網站URL列中,選擇值欄中的連結。
網站URL輸出值是您使用堆疊建立URL之 WordPress 網站安裝指令碼的 。
-
在 WordPress 安裝的 網頁上,遵循畫面上的指示完成 WordPress 安裝。如需安裝 的詳細資訊 WordPress,請參閱 https://wordpress.org/support/article/how-to-install-wordpress/
。 完成安裝並登入後,系統會將您導向儀表板,您可以在其中設定 WordPress 部落格的其他選項。然後,您可以開始撰寫您透過使用 CloudFormation範本成功建立的部落格文章。
步驟 6:清除
您已完成 CloudFormation 入門任務。若要確定您不會針對任何不想要的服務支付費用,您可以透過刪除堆疊及其資源來清除這些服務。
刪除堆疊及其資源
-
從 CloudFormation 主控台中選取 M yWPTestStack 堆疊。
-
選擇 Delete Stack (刪除堆疊)。
-
在出現的確認訊息中,選擇 Yes, Delete (是,刪除)。
M yWPTestStack 的狀態變更為 DELETE_IN_PROGRESS。如同監控堆疊的建立,您可以透過使用 Event (事件) 標籤來監控其刪除。 CloudFormation 完成刪除堆疊時,它會從清單中移除堆疊。
恭喜您!您已成功選擇範本、建立堆疊、檢視和使用其資源,並刪除堆疊及其資源。現在您可以進一步了解範本,以修改現有範本或建立自己的範本:使用 CloudFormation 範本。