建立您的第一個堆疊
本主題會逐步引導您使用 AWS 管理主控台 來建立第一個 CloudFormation 堆疊。遵循本教學課程,您將了解如何佈建基礎的 AWS 資源、監控堆疊事件以及產生輸出。
在此範例中,以 YAML 格式撰寫 CloudFormation 範本。YAML 是一種人類可讀格式,廣泛用於定義基礎結構即程式碼。當您進一步了解 CloudFormation 時,可能也會遇到 JSON 格式的其他範本,但在本教學課程中,為了其可讀性選擇 YAML。
注意
CloudFormation 是免費的,但您需要為建立的 Amazon EC2 和 Amazon S3 資源付費。不過,如果您是初次使用 AWS,則可以利用免費方案
必要條件
-
您必須擁有 AWS 帳戶的存取權限,其 IAM 使用者或角色有權使用 Amazon EC2、Amazon S3 和 CloudFormation,或擁有管理使用者存取權限。
-
必須擁有可存取網際網路的虛擬私有雲端 (VPC)。此逐步解說範本需要預設的 VPC,較新的 AWS 帳戶 會自動提供它。如果沒有預設的 VPC,或已刪除它,請參閱本主題中的疑難排解一節,了解替代解決方案。
使用主控台建立 CloudFormation 堆疊
使用主控台建立 Hello world CloudFormation 堆疊
-
選擇 Create Stack (建立堆疊)。
-
在建立堆疊頁面中,選擇從 Infrastructure Composer 中建置,然後選擇在 Infrastructure Composer 中建立。您會進入 CloudFormation 主控台模式中的 Infrastructure Composer,可以在其中上傳和驗證範例範本。
-
若要上傳和驗證範例範本,請執行下列動作:
-
選擇範本。然後,將下列 CloudFormation 範本複製並貼到範本編輯器中:
AWSTemplateFormatVersion: 2010-09-09 Description: CloudFormation Template for WebServer with Security Group and EC2 Instance Parameters: LatestAmiId: Description: The latest Amazon Linux 2 AMI from the Parameter Store Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' InstanceType: Description: WebServer EC2 instance type Type: String Default: t2.micro AllowedValues: - t3.micro - t2.micro ConstraintDescription: must be a valid EC2 instance type. MyIP: Description: Your IP address in CIDR format (e.g. 203.0.113.1/32). Type: String MinLength: '9' MaxLength: '18' Default: 0.0.0.0/0 AllowedPattern: '^(\d{1,3}\.){3}\d{1,3}\/\d{1,2}$' ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x. Resources: WebServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow HTTP access via my IP address SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: !Ref MyIP WebServer: Type: AWS::EC2::Instance Properties: ImageId: !Ref LatestAmiId InstanceType: !Ref InstanceType SecurityGroupIds: - !Ref WebServerSecurityGroup UserData: !Base64 | #!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd echo "<html><body><h1>Hello World!</h1></body></html>" > /var/www/html/index.html Outputs: WebsiteURL: Value: !Join - '' - - http:// - !GetAtt WebServer.PublicDnsName Description: Website URL在進行下一步之前,讓我們花一點時間查看範本,並了解一些重要的 CloudFormation 概念。
-
建立堆疊時,
Parameters區段會宣告可傳遞至範本的值。在範本中稍後指定的資源會參考這些值並使用資料。參數是一種有效的方法,可指定您不想存放在範本本身中的資訊。也可使用其來指定可能對您要部署之特定應用程式或組態唯一的資訊。 -
範本可定義下列參數:
-
LatestAmiId– 從 AWS Systems Manager Parameter Store 中擷取最新的 Amazon Linux 2 AMI ID。 -
InstanceType– 允許選取 EC2 執行個體類型 (預設值:t2.micro,允許的值:t3.micro,t2.micro)。 -
MyIP– 指定 HTTP 存取的 IP 位址範圍 (預設值:0.0.0.0/0,允許從任何 IP 中存取)。
-
-
Resources區段包含您要使用範本建立之 AWS 資源的定義。資源宣告是一次指定所有組態設定的有效方式。當您將資源宣告包含在範本中時,可以透過使用範本建立堆疊,來建立及設定所有宣告的資源。也可以從相同的範本中建立新堆疊,以啟動相同的資源組態。 -
此範本會建立以下資源:
-
WebServerSecurityGroup– EC2 安全群組,它允許來自指定 IP 範圍的連接埠 80 上的傳入 HTTP 流量。 -
WebServer– 具有下列組態的 EC2 執行個體:-
使用最新的 Amazon Linux 2 AMI
-
套用選取的執行個體類型
-
將
WebServerSecurityGroup新增至SecurityGroupIds屬性 -
包含使用者資料指令碼以安裝 Apache HTTP Server
-
-
-
會在每個資源和參數宣告的開頭指定邏輯名稱。例如,
WebServerSecurityGroup是指派給 EC2 安全群組資源的邏輯名稱。然後,Ref函數會透過其在範本其他部分中的邏輯名稱來參考資源和參數。當一個資源參考另一個資源時,會在兩者之間建立相依性。 -
Outputs區段定義堆疊建立後傳回的自訂值。您可以使用輸出值,從堆疊中的資源傳回資訊,例如資源識別符或 URL。 -
範本會定義一個輸出:
-
WebsiteURL– 已部署的 Web 伺服器的 URL,使用 EC2 執行個體的公有 DNS 名稱建構。Join函數有助於將固定的http://與可變的PublicDnsName合併為單一字串,從而輕鬆輸出 Web 伺服器的完整 URL。
-
-
-
選擇驗證,以確保 YAML 程式碼在上傳範本之前有效。
-
接著,選擇建立範本以建立範本,並將其新增至 S3 儲存貯體。
-
在開啟的對話方塊中,記下 S3 儲存貯體的名稱,以便稍後刪除它。然後,選擇確認並繼續前往 CloudFormation。這將帶您進入 CloudFormation 主控台,現在已在其中指定範本的 S3 路徑。
-
-
在建立堆疊頁面中,選擇下一步。
-
在指定堆疊詳細資訊頁面,於堆疊名稱欄位輸入名稱。堆疊不可含有空格。在此範例中,使用
MyTestStack。 -
在參數下,指定參數值,如下所示:
-
LatestAmiId:它預設為最新的 Amazon Linux 2 AMI。
-
InstanceType:為 EC2 執行個體類型選擇 t2.micro 或 t3.micro。
注意
如果您是第一次使用 AWS,可以使用免費方案來啟動並免費使用
t2.micro執行個體 12 個月 (在無法使用t2.micro的區域中,可以根據免費方案使用t3.micro執行個體)。 -
MyIP:指定具有
/32尾碼的實際公有 IP 位址。/32尾碼用於 CIDR 表示法,以指定允許的單一 IP 位址。它本質上意味著允許流量進出此特定 IP 位址,而不允許其他位址。
-
-
選取下一步兩次,以前往檢閱和建立頁面。在本教學課程中,可以在設定堆疊選項頁面上原樣保留預設值。
-
檢閱堆疊的資訊。當您滿意設定時,請選擇 Submit (提交)。
監控堆疊建立
選擇提交之後,CloudFormation 會開始建立範本中指定的資源。您的新堆疊 MyTestStack 會出現在 CloudFormation 主控台上方部分的清單中。其狀態應為 CREATE_IN_PROGRESS。您可以透過檢視其事件來查看堆疊的詳細狀態。
檢視堆疊的事件
-
在 CloudFormation 主控台中,選擇清單中的堆疊
MyTestStack。 -
在堆疊詳細資訊窗格中,選擇 Events (事件) 標籤。
主控台會每隔 60 秒自動重新整理事件清單,以包含最新的事件。
Events (事件) 標籤會顯示堆疊建立過程中的每個主要步驟,並依每個事件的時間排序,最新的事件放在最上方。
第一個事件 (位於事件清單的底部) 是開始堆疊建立程序:
2024-12-23 18:54 UTC-7 MyTestStack CREATE_IN_PROGRESS User initiated
接下來是標記每個資源建立開始和完成的事件。例如,建立 EC2 執行個體會產生下列項目:
2024-12-23 18:59 UTC-7 WebServer CREATE_COMPLETE
2024-12-23 18:54 UTC-7 WebServer CREATE_IN_PROGRESS Resource creation
initiated
當 CloudFormation 報告已開始建立資源時,會記錄 CREATE_IN_PROGRESS 事件。當資源成功建立時,會記錄 CREATE_COMPLETE 事件。
當 CloudFormation 已成功建立堆疊時,您會在 Events (事件) 標籤頂端看到下列事件:
2024-12-23 19:17 UTC-7 MyTestStack CREATE_COMPLETE
如果 CloudFormation 無法建立資源,它會報告 CREATE_FAILED 事件,且預設會復原堆疊並刪除任何已建立的資源。Status Reason (狀態原因) 欄會顯示導致失敗的問題。
建立堆疊之後,可以前往資源索引標籤來檢視您建立的 EC2 執行個體和安全群組。
測試 Web 伺服器
成功建立堆疊後,導覽至 CloudFormation 主控台中的輸出索引標籤。尋找 WebsiteURL 欄位。這將包含 EC2 執行個體的公有 URL。
開啟瀏覽器並前往 WebsiteURL 下列出的 URL。應該會看到瀏覽器中顯示的簡單 "Hello World!" 訊息。
這確認您的 EC2 執行個體正在執行 Apache HTTP Server 並提供基本網頁。
疑難排解
如果在堆疊建立期間遇到復原,可能是因為缺少 VPC。以下是解決此問題的方法。
沒有可用的預設 VPC
此逐步解說中的範本需要預設 VPC。如果堆疊建立因 VPC 或子網路可用性錯誤而失敗,則帳戶中可能沒有預設 VPC。您有下列選項:
-
建立新的預設 VPC – 可以透過 Amazon VPC 主控台來建立新的預設 VPC。如需說明,請參閱《Amazon VPC 使用者指南》中的建立預設 VPC。
-
修改範本以指定子網路 – 如果您有非預設 VPC,可以修改範本以明確指定 VPC 和子網路 ID。將以下參數新增至範本:
SubnetId: Description: The subnet ID to launch the instance into Type: AWS::EC2::Subnet::Id然後,更新
WebServer資源以包含子網路 ID:WebServer: Type: AWS::EC2::Instance Properties: ImageId: !Ref LatestAmiId InstanceType: !Ref InstanceType SecurityGroupIds: - !Ref WebServerSecurityGroup SubnetId: !Ref SubnetId UserData: !Base64 | #!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd echo "<html><body><h1>Hello World!</h1></body></html>" > /var/www/html/index.html建立堆疊時,您需要指定具有網際網路存取權的子網路,才能連線 Web 伺服器。
清除
若要確定您不會針對任何不想要的服務支付費用,您可以透過刪除堆疊及其資源來清除這些服務。也可以刪除存放堆疊範本的 S3 儲存貯體。
刪除堆疊及其資源
-
在堆疊頁面中,選取您所建立堆疊名稱旁的選項 (
MyTestStack),然後選擇刪除。 -
出現確認提示時,請選擇刪除。
-
在事件索引標籤中監控堆疊刪除程序的進度。
MyTestStack的狀態會變更為DELETE_IN_PROGRESS。當 CloudFormation 完成刪除堆疊時,它會從清單移除堆疊。
如果已完成使用範例範本,且不再需要 Amazon S3 儲存貯體,請將其刪除。您必須先清空儲存貯體,才能將其刪除。清空儲存貯體將會刪除其中的所有物件。
若要清空和刪除 Amazon S3 儲存貯體
-
開啟 Amazon S3 主控台
。 -
在主控台左側的導覽窗格中,選擇 Buckets (儲存貯體)。
-
在儲存貯體清單中,選取您為此教學課程建立的儲存貯體名稱旁的選項,然後選擇清空。
-
在清空儲存貯體頁面上的文字欄位中輸入
permanently delete,以確認您要清空儲存貯體,然後選擇清空。 -
在 Empty bucket: Status (清空儲存貯體:狀態) 頁面上監控儲存貯體清空的進度。
-
若要返回儲存貯體清單,請選擇 Exit (結束)。
-
選取儲存貯體名稱旁邊的選項,然後選擇刪除。
-
出現確認提示時,請輸入儲存貯體名稱,然後選擇刪除儲存貯體。
-
從儲存貯體清單中,監控儲存貯體刪除程序的進度。當 Amazon S3 完成刪除儲存貯體時,它會從清單移除儲存貯體。
後續步驟
恭喜您!您已成功建立堆疊、監控其建立並使用其輸出。
若要繼續學習:
-
進一步了解範本,以便您可以建立自己的範本。如需更多詳細資訊,請參閱 使用 CloudFormation 範本。
-
請嘗試 CloudFormation 入門
工作坊,以取得有關範本建立的更多實作實務。 -
如需 CloudFormation 入門
的精簡版本,請參閱 在 Amazon EC2 上部署應用程式。本主題說明使用 CloudFormation 協助程式指令碼 cfn-init來引導 Amazon EC2 執行個體的相同案例。