使用舊 AWS CloudFormation 設計工具建立範本 - AWS CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用舊 AWS CloudFormation 設計工具建立範本

注意

CloudFormation 主控台模式中的基礎設施編譯器是 AWS CloudFormation Designer 的改進。我們建議您盡可能使用 Infrastructure Composer 而非 Designer。如需詳細資訊,請參閱使用 Infrastructure Composer 以視覺化方式建立範本

Designer 是一種圖形工具,用於建立、檢視和修改 AWS CloudFormation 範本。使用 設計工具,您可以使用介面繪製範本資源 drag-and-drop的圖表,然後使用整合式 JSON和 YAML編輯器編輯其詳細資訊。無論您是新使用者還是經驗豐富的 AWS CloudFormation 使用者, AWS CloudFormation Designer 都可以協助您快速查看範本資源之間的相互關係,並輕鬆修改範本。

設計工具是 AWS CloudFormation 主控台的一部分。若要使用它,請在https://console.aws.amazon.com/cloudformation/設計工具開啟設計工具,然後使用您的 AWS 憑證登入。

設計工具提供下列優點:它可讓您查看範本中資源的圖形表示法、簡化範本撰寫,以及簡化範本編輯。

視覺化範本資源

剖析 YAMLJSON或 格式的文字檔案,以查看範本中的資源及其關係可能很困難。在設計工具中,您可以查看包含在範本中資源的圖形表示,以及其互相關聯的方式。

設計工具會在範本中繼資料中定義您資源的資訊,例如其大小和相對位置。當您開啟範本時,設計工具 會自動新增此中繼資料,以在您儲存範本時保留目前的配置。當您在設計工具中重新開啟範本時,它會以您上一次儲存範本時完全相同的方式呈現圖表。

所有配置資訊都是在 AWS::CloudFormation::Designer 中繼資料鍵中定義,並且僅會由設計工具使用,而不會影響建立 AWS CloudFormation 堆疊。以下範本中繼資料範例顯示設計工具作為中繼資料新增至範本的配置資訊。

JSON

"Metadata": { "AWS::CloudFormation::Designer": { "6b56eaae-0bb6-4215-aad6-12345EXAMPLE": { "size": { "width": 60, "height": 60 }, "position": { "x": 340, "y": 430 }, "z": 2, "parent": "21ccc9b0-29e9-4a86-9cf2-12345EXAMPLE", "embeds": [], "ismemberof": [ "c3eead73-6a76-4532-9268-12345EXAMPLE" ] }, ...

YAML

Metadata: 'AWS::CloudFormation::Designer': 6b56eaae-0bb6-4215-aad6-12345EXAMPLE: size: width: 60 height: 60 position: x: 340 'y': 430 z: 2 parent: 21ccc9b0-29e9-4a86-9cf2-12345EXAMPLE embeds: [] ismemberof: - c3eead73-6a76-4532-9268-12345EXAMPLE ...

簡化範本的編寫

當您在文字編輯器中編寫範本資源時,您必須手動編輯 JSON或 YAML,這可能很繁瑣且容易出錯。透過使用 設計工具,您可以減少手動編碼範本的時間,並有更多時間設計 AWS 基礎設施。在設計工具中,您可以拖放新資源,將他們新增至您的範本,然後拖曳資源之間的關聯以建立關係。設計工具會自動修改 JSON或 YAML。

當您建立範本時,設計工具會強制執行一些資源間的基本關聯,以協助您建立有效的範本。例如,您無法直接在 內新增EC2執行個體VPC;您必須在 中的子網路內新增執行個體VPC。

您也可以在設計工具中直接驗證範本。它提供與ValidateTemplateAPI呼叫相同的驗證層級,可檢查 JSON或 YAML 語法是否有效、是否宣告所有參考的參數,以及沒有循環相依性。

使用整合式 JSON和 YAML 編輯器簡化編輯

使用整合式編輯器,您可以在 AWS CloudFormation 主控台中對您的範本進行修改。您無須使用單獨的文字編輯器來修改和儲存您的範本。整合式編輯器也提供自動完成功能,可列出資源的所有屬性名稱,因此您無需查詢或記憶他們。此外,您可以使用整合式編輯器將JSON範本轉換為 YAML,反之亦然。

設計工具有四個窗格。canvas (畫布) 窗格顯示您範本資源的圖表,讓您可以概覽他們以及其關聯。若要將資源新增至您的範本,您可將他們從 Resources types (資源類型) 窗格拖曳到 canvas (畫布) 窗格上。使用整合JSON和YAML編輯器窗格來指定範本詳細資訊,例如資源屬性或範本參數。在您修改範本之後,您可以將它儲存到本機檔案,或是 Amazon S3 儲存貯體。當您將有效範本從 JSON 轉換為 YAML或反之亦然,訊息窗格會顯示成功或失敗訊息。當您開啟或驗證無效的範本時,Messages (訊息) 窗格會顯示驗證錯誤。

注意

設計工具無法顯示或修改您堆疊內的執行中資源;請只用它來建立、修改和儲存範本。

下圖顯示設計工具窗格及其主要元件。

設計工具窗格及元件

設計工具的螢幕擷取畫面,其中窗格和元件已進行編號。
1. 工具列

工具列可提供常見動作命令的快速存取,例如開啟和儲存範本、復原或重做變更、建立堆疊,以及驗證您的範本。您也可以在畫布窗格中,將圖表作為影像下載、取得協助,或是重新整理圖表。

2. 資源類型窗格

資源類型窗格會列出您可以新增至範本的所有範本資源,並依其 AWS 服務名稱分類。您可以透過將他們從 Resource types (資源類型) 窗格拖曳至畫布,來新增資源。大多數支援的資源都已在 AWS 資源和屬性類型參考中列出。Resource types (資源類型) 窗格不會列出連線中的資源,例如 AWS::EC2::SubnetRouteTableAssociation 資源。您可以在您連線相關資源時建立這些資源,例如當您將路由表連線到子網路時。如需詳細資訊,請參閱畫布窗格

注意

設計工具只能顯示 AWS CloudFormation支援的資源類型。它無法顯示其他實體,例如可用區域 (AZs) 或巢狀堆疊的資源。

3. 畫布窗格

canvas (畫布) 窗格會將您的範本資源以圖表顯示。您可以使用它來新增或移除資源、建立資源之間的關聯,以及排列其配置。您在畫布中所做的變更會自動修改範本的 JSON或 YAML。如需詳細資訊,請參閱畫布窗格

4. 調整成視窗大小按鈕

可將 canvas (畫布) 窗格調整成您範本圖表大小的按鈕。

5. 全螢幕及分割畫面按鈕

可選取設計工具不同檢視的按鈕。您可以選取畫布的全螢幕檢視、整合式JSON和YAML編輯器的全螢幕檢視,或畫布和編輯器的分割螢幕檢視。

6. 整合JSON和YAML編輯器窗格

在 整合式編輯器 中,您可以指定您範本的詳細資訊,例如資源屬性或範本參數。當您在畫布 中選取項目時,設計工具會在編輯器YAML中反白顯示相關 JSON或 。編輯 JSON或 後YAML,您必須選擇重新整理圖表 (重新整理圖示) 來更新圖表。您可以在選擇範本語言 中選取適當的選項按鈕,YAML在 JSON 和 之間轉換有效的範本。 設計工具只能轉換有效YAML或有效的JSON範本。如果轉換成功,訊息窗格會顯示訊息,例如:成功將範本轉換為 YAML。 AWS CloudFormation Designer 在轉換範本時不會保留格式。

重要

建議您不要在 設計工具中將#YAML註解新增至範本。如果您的YAML範本有#註解,設計工具在編輯 YAML或轉換為 時不會保留這些註解JSON。若您在 設計工具 中編輯或修改您的範本 (例如,若您在畫布上拖曳資源),您將會遺失您的註解。

一旦您選擇範本語言,任何您拖曳到畫布上的新資源都會以您選取的語言建立。若要變更回其他語言,請確保您的範本有效,然後選擇 YAMLJSON ,其中顯示選擇範本語言

7. 訊息窗格

當您將範本從 JSON 轉換為 YAML或反之亦然,訊息窗格會顯示成功或失敗訊息。當您開啟、驗證,或嘗試使用無效的範本建立堆疊時,Messages (訊息) 窗格會顯示驗證錯誤。

畫布窗格

設計工具會在 canvas (畫布) 窗格中將您的範本資源以圖表顯示。您可以在此窗格中修改圖表的配置、新增或移除資源,以及新增或移除資源間的連線。例如,您可以從 Resource types (資源類型) 窗格,將 Auto Scaling 群組和啟動組態新增至 canvas (畫布) 窗格。若要連線這些相關資源,您只需要在他們之間拖曳連線即可。

設計工具如何建立資源模型?

當您將資源從 Resource types (資源類型) 窗格拖曳到 canvas (畫布窗格) 時,設計工具會將其作為容器或方形物件建模。

容器

容器資源為可調整大小的矩形,並可包含其他資源。例如,設計工具會將 AWS::EC2::VPC 資源類型作為容器建模。您可以將子網路等資源拖曳至 VPC。

容器資源

容器資源的範例。
方形物件

方形物件資源無法調整大小或包含其他資源。例如,設計工具會將 AWS::EC2::Instance 資源類型作為方形物件建模。

方形物件

方形物件的範例。

連線資源

您可以連線資源,以建立相關資源間的關聯。例如,當您將網際網路閘道和 VPC新增至畫布窗格時,它們沒有關係。若要將閘道連接至 VPC,您必須將其連線。連線資源的方法取決於資源類型,以及設計工具為資源建模的方式。以下描述和圖表說明每一種方法。

將資源新增到容器

當您將有效的資源拖曳到容器內時,設計工具會自動建立資源和容器間的關聯。例如, VPCs是容器資源;您可以將子網路拖曳至 VPC,而 設計器會自動關聯這兩個資源。

VPC 容器內的子網路資源。

這些關聯會在您的範本中以 Ref 內部函數表示,如以下範例所示:

JSON

"PublicSubnet": { "Type": "AWS::EC2::Subnet", "Properties": { "VpcId": { "Ref": "VPC" }, "CidrBlock": "10.0.0.0/24" }

YAML

PublicSubnet: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref VPC CidrBlock: 10.0.0.0/24

在某些情況下,將資源置放在容器內不會建立關聯。您必須在資源間拖曳連線 (請參閱下一個方法以取得在資源間拖曳連線的資訊)。若要查看設計者是否關聯資源,請使用整合式 JSON和 YAML 編輯器,Ref從一個資源尋找另一個資源的 。例如,當您在子網路容器內新增 Auto Scaling 群組時,設計工具不會指定群組的 VPCZoneIdentifier (子網路) 屬性。若要關聯這兩個資源,您必須從 Auto Scaling 群組拖曳連線至子網路。

拖曳資源之間的連線

每個方形及容器資源的邊緣都有一或多個點,表示您可以用來建立連線的資源。若要建立連線,請從點拖曳連線至對應的資源類型。例如,若要將網際網路閘道連接至 VPC,請將VPC閘道連接點的行拖曳至 上的任何地方VPC。

拖曳連線以建立連線 (以箭頭顯示)。

這些關聯會在您的範本中以 Ref 內部函數或獨立的資源類型表示。例如,當您將網際網路閘道與 連線時VPC,設計工具會在範本中建立AWS::EC2::VPCGatewayAttachment資源類型來建立關聯。類似這些資源不會在 Resource types (資源類型) 窗格中列出。

JSON

"VPCGatewayAttachment": { "Type": "AWS::EC2::VPCGatewayAttachment", "Properties": { "InternetGatewayId": { "Ref": "InternetGateway" }, "VpcId": { "Ref": "VPC" } }

YAML

VPCGatewayAttachment: Type: 'AWS::EC2::VPCGatewayAttachment' Properties: InternetGatewayId: !Ref InternetGateway VpcId: !Ref VPC
編寫資源之間連線的程式碼

在某些情況下,您必須編輯範本的 JSON或 YAML才能建立連線,例如當您連接兩個安全群組時。當您必須編輯 JSON或 YAML才能建立連線時,您可以建立硬式編碼連線 (虛線連線)。您無法在 canvas (畫布) 窗格中建立或編輯這些連線。

兩個使用虛線連線的資源。

一般而言,當您在資源的屬性中內嵌參考 (Ref) 時,您會建立硬式編碼連線。例如,您可以定義兩個安全群組之間的連線,其中一個安全群組具有允許來自另一個安全群組之流量的內嵌輸入規則。以下 WebServerSecurityGroup 資源具有參考 PublicLoadBalancerSecurityGroup 資源的輸入規則。

JSON

"WebServerSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "VpcId": { "Ref": "VPC" }, "GroupDescription": "Allow access from HTTP and SSH traffic", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "CidrIp": "0.0.0.0/0" }, { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": { "Ref": "SSHLocation" } } ] } ...

YAML

WebServerSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: VpcId: !Ref VPC GroupDescription: Allow access from HTTP and SSH traffic SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: !Ref SSHLocation

使用資源選單存取常見資源動作

Resource (資源) 選單可讓您輕鬆存取常見的資源動作:編輯資源屬性、複製資源、刪除資源,或是檢視資源的文件。若要查看 Resource (資源) 選單,請在 canvas (畫布) 窗格中以滑鼠右鍵按一下資源。文件連結會前往範本參考,說明該資源的屬性和語法。

資源選單

資源選單及其四個按鈕。

定義明確依存性

若要指定 AWS CloudFormation 建立和刪除資源的順序,您可以建立明確的相依性。明確相依性對於覆寫平行資源建立和刪除非常有用。 AWS CloudFormation 會自動決定範本中哪些資源可以平行處理,哪些資源無法處理。當您在相同範本中指定參考來自其他來源 (使用Ref內部函數) 的屬性,或從其他資源 (使用Fn::GetAtt內部函數) 取得屬性的屬性時,這表示相依性並以正確的順序 AWS CloudFormation 建置。

但是,在某些情況下,您必須明確定義依存性。例如,在閘道連接至 之前,路由規則無法使用網際網路閘道VPC。一般而言,由於具有隱含相依性,在建立網際網路閘道後立即 AWS CloudFormation 建立路由規則。但是, AWS CloudFormation 在網際網路閘道連接到 之前,可能會建立規則VPC,這會導致錯誤。因此,您必須明確定義閘道VPC連接上的相依性。

若要建立明確相依性,請將路由上的 DependsOn*) 點的行拖曳至閘道VPC連接。

拖曳 DependsOn 點以建立相依性。

如需您可能需要建立明確依存性之時機的詳細資訊,請參閱 DependsOn 屬性

JSON

在 中JSON,這些明確相依性在資源上表示為DependsOn屬性,如下列範例所示:

"PublicRoute": { "Type": "AWS::EC2::Route", "DependsOn": "VPCGatewayAttachment", "Properties": { "DestinationCidrBlock": "0.0.0.0/0", "RouteTableId": { "Ref": "PublicRouteTable" }, "GatewayId": { "Ref": "InternetGateway" } }
YAML

在 中YAML,這些明確相依性在資源上表示為DependsOn屬性,如下列範例所示:

PublicRoute: Type: 'AWS::EC2::Route' DependsOn: - VPCGatewayAttachment Properties: DestinationCidrBlock: 0.0.0.0/0 RouteTableId: !Ref PublicRouteTable GatewayId: !Ref InternetGateway

整合JSON和YAML編輯器

使用設計工具的整合JSON和YAML編輯器來檢視和編輯範本詳細資訊。例如,您可以使用整合式編輯器來定義資源的屬性或變更範本參數。整合式編輯器有兩種檢視:Components (元件) 檢視和 Template (範本) 檢視。

若要對指定的範本區段進行微幅變更,請使用 Components (元件) 檢視。在 Components (元件) 檢視中,您可以編輯的元件會以標籤分類。這些標籤會根據您是否已選取資源而變更。

例如若您選取資源,設計工具會提供編輯資源屬性的標籤,例如更新政策或建立政策。若您沒有選取任何項目,設計工具會提供編輯範本參數、映射、條件、中繼資料及輸出的標籤。您在元件檢視中所做的任何變更都必須有效JSON或YAML加價。如果您引入無效 JSON或 YAML,設計器會在您離開元件檢視時將無效標記還原為有效標記。

若要對您的範本進行大幅變更,請使用 Template (範本) 檢視。在範本檢視中,整合式 JSON和 YAML 編輯器會顯示整個範本YAML的原始 JSON或 。當您想要變更資源時,請在畫布窗格中選取該資源 設計工具會自動在整合 JSON和 YAML 編輯器中反白該資源。

AWS CloudFormation 設計工具整合JSON和YAML編輯器

整合的螢幕擷取畫面JSON和具有原始 的YAML編輯器JSON。

將範本轉換為 YAML或 JSON

您可以在YAML選擇範本語言 中選取適當的選項按鈕,在 JSON和 之間來回轉換有效的範本。 設計工具只能轉換有效YAML或有效的JSON範本。如果轉換成功,訊息窗格會顯示訊息,例如:成功將範本轉換為 YAML

重要

建議您不要在 設計工具中將#YAML註解新增至範本。如果您的YAML範本有#註解,設計工具在編輯 YAML或轉換為 時不會保留這些註解JSON。若您在 設計工具 中編輯或修改您的範本 (例如,若您在畫布上拖曳資源),您將會遺失您的註解。

一旦您選擇範本語言,任何您拖曳到畫布上的新資源都會以您選取的語言建立。若要變更回其他語言,請確定您的範本有效,然後選擇 YAMLJSON ,其中顯示選擇範本語言

注意

當您將範本轉換為 時YAML, Designer 會使用函數的簡短形式符號。例如:- !GetAtt。此外,您繪製的任何視覺化連結都會在 YAML 模式下使用短形式記號。如需內部函數的詳細資訊,請參閱Ref

自動完成

整合式 JSON和 YAML 編輯器包含自動完成功能,可協助您指定資源屬性,因此您不需要記住屬性名稱。若要查看JSON範本中有效屬性的清單,請在Properties捲曲支架 ({}Ctrl+Space內按 ,如下列範例所示:

JSON 範例中的自動完成選項。

對於YAML範本,您可以先刪除開啟和關閉捲翹支架,然後按 Enter 前往新的行。若要查看有效屬性清單,請在 Properties 之後的新行上按 Ctrl+Space,如以下範例所示:

YAML 範例中的自動完成選項。

鍵盤快速鍵

Designer 的整合式 JSON和YAML編輯器提供下列鍵盤快速鍵:

Ctrl+Space

在資源的 Properties 鍵中,列出資源所有可用的屬性。

Ctrl+F

搜尋指定的值。

若要反白所有符合指定值的項目,請按 Alt+Enter

如需如何使用 AWS CloudFormation 設計工具建立和更新範本的範例,請參閱下列逐步解說: