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

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

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

CloudFormation 主控台模式中的「應用程式撰寫器」是以視覺化方式構成 CloudFormation 基礎結構的全新且建議 只有在您的區域支援 AWS CloudFormation 設計工具時,才能使用舊版設計工具。如需詳細資訊,請參閱 使用應用程式撰寫器以視覺化方式

Designer 是用於創建,查看和修改 AWS CloudFormation 模板的圖形工具。使用 Designer,您可以使用 drag-and-drop 介面繪製範本資源的圖表,然後使用整合的 JSON 和 YAML 編輯器編輯範本資源的詳細資料。無論您是新手還是有經驗的 AWS CloudFormation 用戶, AWS CloudFormation Designer 都可以幫助您快速查看模板資源之間的相互關係,並輕鬆修改模板。

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

Designer 提供下列優點:它可讓您查看範本中資源的圖形表示、簡化範本製作,並簡化範本編輯作業。

視覺化範本資源

剖析 JSON (或 YAML) 格式的文字檔案,以查看您範本中的資源及其關聯並不容易。在設計工具中,您可以查看包含在範本中資源的圖形表示,以及其互相關聯的方式。

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

所有配置資訊都是在 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,這種方式不僅單調乏味且極易出錯。透過使用 Designer,您可以減少手動編寫範本的時間,而將更多時間設計 AWS 基礎結構。在設計工具中,您可以拖放新資源,將他們新增至您的範本,然後拖曳資源之間的關聯以建立關係。設計工具會自動修改 JSON 或 YAML。

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

您也可以在設計工具中直接驗證範本。它提供和 ValidateTemplate API 呼叫相同層級的驗證,檢查 JSON 或 YAML 語法是否有效、所有參考參數都已進行宣告,並且沒有循環參考。

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

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

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

注意

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

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

設計工具窗格及元件

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

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

2. 資源類型窗格

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

注意

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

3. 畫布窗格

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

4. 調整成視窗大小按鈕

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

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

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

6. 整合式 JSON 及 YAML 編輯器窗格

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

重要

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

一旦您選擇範本語言,任何您拖曳到畫布上的新資源都會以您選取的語言建立。若要變更回另一種語言,請確認您的範本有效,然後在其提示 Choose template language (選擇範本語言) 時選取 YAMLJSON

7. 訊息窗格

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

畫布窗格

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

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

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

容器

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

容器資源

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

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

方形物件

方形物件的範例。

連線資源

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

將資源新增到容器

當您將有效的資源拖曳到容器內時,設計工具會自動建立資源和容器間的關聯。例如,VPC 是容器資源。您可以將子網路拖曳到 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 立和刪除資源的順序,您可以建立明確的相依性。明確的相依性對於覆寫 parallel 資源建立和刪除非常有用。 AWS CloudFormation 會自動判斷範本中哪些資源可以 parallel 處理,哪些不能處理。當您指定一個從另一個源引用屬性的屬性(使用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 (元件) 檢視中,您可以編輯的元件會以標籤分類。這些標籤會根據您是否已選取資源而變更。

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

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

AWS CloudFormation 設計師整合式 JSON 與 YAML 編輯器

整合式 JSON 及 YAML 編輯器與原始 JSON 的螢幕擷取畫面。

將範本轉換成 YAML 或 JSON

您可以在 Choose template language (選擇範本語言) 中,選取適當的選項按鈕,將有效的範本在 JSON 和 YAML 之間來回轉換。設計工具只能轉換有效的 YAML 或有效的 JSON 範本。若轉換成功,Messages (訊息) 窗格會顯示類似如下的訊息:Successfully converted the template to YAML (成功將範本轉換成 YAML)。

重要

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

一旦您選擇範本語言,任何您拖曳到畫布上的新資源都會以您選取的語言建立。若要變更回另一種語言,請確認您的範本有效,然後在其提示 Choose template language (選擇範本語言) 時選取 YAMLJSON

注意

當您將範本轉換成 YAML 時,設計工具會針對函數使用簡短形式的表示法。例如 - !GetAtt。此外,任何您繪製的視覺連結都會在 YAML 模式中使用簡短形式表示法。如需內部函數的詳細資訊,請參閱Ref

自動完成

整合式 JSON 及 YAML 編輯器 包含自動完成功能,可協助您指定資源屬性,使您無須記得屬性名稱。若要在 JSON 範本中查看有效屬性清單,請在 Properties 大括號 ({}) 中按 Ctrl+Space,如以下範例所示:

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

若為 YAML 範本,您可以先刪除左大括號及右大括號,然後按 Enter 前往新的一行。若要查看有效屬性清單,請在 Properties 之後的新行上按 Ctrl+Space,如以下範例所示:

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

鍵盤快速鍵

設計工具的整合式 JSON 及 YAML 編輯器提供以下鍵盤快速鍵:

Ctrl+Space

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

Ctrl+F

搜尋指定的值。

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

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