以前のバージョンの AWS CloudFormation デザイナーを使用してテンプレートを作成する
注記
CloudFormation コンソールモードの Application Composer は、AWS CloudFormation デザイナーから改良されたものです。可能な限り、デザイナーの代わりに Application Composer を使用することをお勧めします。詳細については、「Application Composer を使用してテンプレートを視覚的に作成する」を参照してください。
デザイナーは、 AWS CloudFormation テンプレートを作成、参照、および変更するためのグラフィックツールです。デザイナー を使用すると、ドラッグアンドドロップインターフェースを使用してテンプレートリソースを図示し、統合された JSON および YAML エディタ を使用して詳細を編集できます。新しい AWS CloudFormation ユーザーでも経験豊富なユーザーでも、AWS CloudFormation デザイナーを使用すればテンプレートのリソース間の相互関係をすばやく確認し、簡単にテンプレートを変更できます。
デザイナー は、AWS CloudFormation コンソールの一部です。使用するには、https://console.aws.amazon.com/cloudformation/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 を手動で編集する必要がありますが、この作業は面倒でエラーを起こしやすくなります。デザイナーを使用すると、テンプレートを手動でコーディングする時間を短くして、AWS インフラストラクチャの設計に時間をかけられるようになります。デザイナーでは、新しいリソースをドラッグアンドドロップしてテンプレートに追加したり、リソース間の接続をドラッグして関係を確立したりできます。デザイナー は自動的に JSON または YAML を変更します。
テンプレートを作成すると、デザイナー はリソース間に基本的な関係を適用して、有効なテンプレートの作成を支援します。例えば、VPC 内で EC2 インスタンスを直接追加することはできません。VPC のサブネット内にインスタンスを追加する必要があります。
デザイナー でテンプレートを直接検証することもできます。これは、JSON または YAML 構文が有効であること、参照されているすべてのパラメータが宣言されていること、および循環依存がないことをチェックする ValidateTemplate
API 呼び出しと同じレベルの検証を提供します。
統合された JSON および YAML エディタ での編集の簡略化
統合されたエディタ を使用すると、AWS CloudFormation コンソールでテンプレートの変更を行うことができます。テンプレートを変更して保存するために、別個のテキストエディタを使用する必要はありません。統合されたエディタ には、リソースのすべてのプロパティ名をリストするオートコンプリート機能も備わっているため、それらを検索したり暗記したりする必要はありません。さらに、統合エディタを使用して JSON テンプレートを YAML に変換することができます。逆も同様です。
デザイナー
注記
デザイナー は、スタックで実行中のリソースを表示したり変更することはできません。スタックの作成、変更、保存のみに使用します。
次の図は、デザイナー ペインとそのメインコンポーネントを示しています。
デザイナー のペインとコンポーネント
- 1. ツールバー
-
ツールバーは、テンプレートを開いたり保存する、変更の取り消しまたはやり直し、スタックの作成、テンプレートを検証などの、一般的な操作コマンドへのクイックアクセスを提供します。図をイメージとしてダウンロードしたり、ヘルプを表示したり、キャンバスペインで図を更新したりすることもできます。
- 2. [リソースタイプ] ペイン
-
[Resource types (リソースタイプ)] ペインには、テンプレートに追加可能なすべてのテンプレートリソースが、AWS サービス名で分類されてリストされます。リソースは、[リソースタイプ] ペインから [canvas (キャンバス)] にドラッグして追加します。サポートされるリソースの大部分は、「AWS リソースおよびプロパティタイプのリファレンス」で説明されています。[リソースタイプ] ペインには、
AWS::EC2::SubnetRouteTableAssociation
リソースなどの接続リソースはリストされません。これらのリソースは、ルートテーブルをサブネットに接続するときなど、関連するリソースを接続するときに作成します。詳細については、「[Canvas (キャンバス)] ペイン」を参照してください。注記
デザイナー は、AWS CloudFormation によりサポートされるリソースタイプのみを表示できます。アベイラビリティーゾーン (AZs)、または入れ子スタックのリソースなどの、他のエンティティは表示できません。
- 3. [Canvas (キャンバス)] ペイン
-
[canvas (キャンバス)] ペインには、テンプレートリソースが図として表示されます。リソースの追加または削除、リソース間の関係の作成、レイアウトのアレンジに使用できます。[canvas (キャンバス)] で変更を行うと、テンプレート の JSON または YAML が自動的に変更されます。詳細については、「[Canvas (キャンバス)] ペイン」を参照してください。
- 4. ウィンドウボタンとの適合
-
テンプレートの図に適合するように、[canvas (キャンバス)] ペインのサイズを変更するボタンです。
- 5. [Full screen (全画面)] ボタンと [Split screen (分割画面)] ボタン
-
デザイナーの異なる表示を選択するボタン。キャンバスの全画面表示、統合された JSON と YAML エディタの全画面表示、またはキャンバスとエディタの分割画面表示を選択できます。
- 6. [Integrated JSON and YAML editor (統合された JSON と YAML エディタ)] ペイン
-
統合されたエディタ で、リソースプロパティまたはテンプレートパラメータなどの、テンプレートの詳細を指定します。[canvas (キャンバス)] で項目を選択すると、関連する JSON または YAML が デザイナー のエディタでハイライトされます。JSON または YAML を編集した後は、ダイアグラムを更新するために [ダイアグラムを更新] (更新アイコン) を選択する必要があります。[Choose template language] (テンプレート言語の選択) で適切なラジオボタンを選択して、JSON と YAML の間で有効なテンプレートを変換できます。デザイナーは、有効な YAML または有効な JSON テンプレートのみを変換できます。変換に成功すると、[Messages] (メッセージ) ペインに次のようなメッセージが表示されます。テンプレートは YAML に正常に変換されました。AWS CloudFormationデザイナーは、テンプレートの変換時に書式設定を保持しません。
重要
デザイナー のテンプレートに
#
YAML コメントを追加しないことをお勧めします。YAML テンプレートに#
コメントがある場合、デザイナー は YAML を編集したり JSON に変換したりするときにコメントを保持しません。デザイナー でテンプレートを編集または変更する場合 (たとえば、キャンバスにリソースをドラッグする場合)、コメントは失われます。テンプレート言語を選択すると、キャンバスにドラッグした新しいリソースは、選択した言語で作成されます。別の言語に戻すには、テンプレートが有効であることを確認してから、[Choose template language] という YAML または JSON を選択します 。
- 7. [Messages (メッセージ)] ペイン
-
テンプレートを JSON から YAML に、またはその逆に変換すると [Messages (メッセージ)] ペインに成功または失敗のメッセージが表示されます。無効なテンプレートを使用してスタックを開いたり、検証したり、スタックを作成したりしようとすると、[Messages (メッセージ)] ペインに検証エラーが表示されます。
[Canvas (キャンバス)] ペイン
デザイナー は、[canvas (キャンバス)] ペインにテンプレートリソースを図として表示します。図のレイアウトの変更、リソースの追加または削除、このペインのリソース間の接続の追加または削除を行うことができます。たとえば、Auto Scaling グループと起動構成を [リソースタイプ] ペインから [canvas (キャンバス)] ペインに追加できます。これらの関連リソースを接続するには、リソース間で接続をドラッグします。
デザイナー がリソースをモデル化する方法
[リソースタイプ] ペインから [canvas (キャンバス)] ペインにリソースをドラッグすると、デザイナー によりコンテナまたはスクエアオブジェクトとしてモデル化されます。
- コンテナ
-
コンテナリソースは、他のリソースを含むサイズ変更可能な四角形です。たとえば、デザイナー は
AWS::EC2::VPC
リソースタイプをコンテナとしてモデル化します。サブネットなどのリソースを VPC にドラッグできます。コンテナリソース
- スクエアオブジェクト
-
スクエアオブジェクトのリソースは、サイズを変更したり、他のリソースを追加したりすることはできません。たとえば、デザイナー は
AWS::EC2::Instance
リソースをスクエアオブジェクトとしてモデル化します。スクエアオブジェクト
接続リソース
関連リソース間の関連付けを作成するには、リソースを接続します。たとえば、インターネットゲートウェイおよび VPC を [canvas (キャンバス)] ペインに追加した場合、関係はありません。VPC にゲートウェイをアタッチするには、それらを接続する必要があります。リソースを接続する方法は、リソースタイプと、デザイナー がリソースをモデル化した方法によって異なります。次の説明と図に、各方法を示します。
- コンテナへのリソースの追加
-
有効なリソースをコンテナにドラッグすると、デザイナー によりリソースとコンテナの間の関連付けが自動的に作成されます。たとえば、VPC はコンテナリソースです。サブネットを VPC にドラッグすると、デザイナー により 2 つのリソースが自動的に関連付けられます。
これらの関連付けは、次の例に示すとおり、テンプレートに
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
(サブネット) プロパティが指定されません。2 つのリソースを関連付けるには、Auto Scaling グループからサブネットに接続をドラッグする必要があります。 - リソース間での接続のドラッグ
-
各スクエアおよびコンテナリソースの角には 1 つ以上のドットがあります。これは、接続を作成できるリソースを表しています。接続を作成するには、コネクタ線をドットから対応するリソース対応にドラッグします。たとえば、インターネットゲートウェイを 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
- リソース間での接続のコーディング
-
場合によっては (2 つのセキュリティグループを接続する場合など)、テンプレートの JSON または YAML を編集して接続を作成する必要が生じることがあります。JSON または YAML を編集して接続を作成する必要がある場合、ハードコード接続 (破線接続) を作成します。[canvas (キャンバス)] ペインでこれらの接続を作成または編集することはできません。
通常、リソースのプロパティ内に参照 (
Ref
) を埋め込むと、ハードコード接続が作成されます。たとえば、他のグループからのトラフィックを許可する進入ルールが 1 つのセキュリティグループに組み込まれている場合は、2 つのセキュリティグループ間に接続を定義することができます。次の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
[リソース] メニューを使用した一般的なリソース アクションへのアクセス
[リソース] メニューで、リソースプロパティの編集、リソースのコピー、リソースの削除、またはリソースのドキュメントの閲覧などの、一般的なリソースに対するアクションに簡単にアクセスできます。[リソース] メニューを表示するには、[canvas (キャンバス)] ペインでリソースを右クリックします。ドキュメントリンクをクリックすると、そのリソースのプロパティと構文を説明するテンプレート参照に移動します。
メニューリソース
明示的な依存関係の定義
AWS CloudFormation がリソースを作成し、削除する順序を指定するには、明示的な依存関係を作成できます。明示的な依存関係は、並列リソースの作成と削除を上書きするのに役立ちます。AWS CloudFormation により、同時に処理できるテンプレート内のリソースとできないテンプレート内のリソースが自動的に判断されます。別のソースの属性を参照する (Ref
組み込み関数を使用) か、同じテンプレート内の別のリソースの属性を取得する (Fn::GetAtt
組み込み関数を使用) プロパティを指定すると、依存関係ができあがり、AWS CloudFormation により適切な順序で構築されます。
ただし、状況によっては、明示的に依存関係を定義する必要があります。例えば、ルーティングルールは、ゲートウェイが VPC にアタッチされるまでインターネットゲートウェイを使用することができません。通常、AWS CloudFormation は、暗黙的な依存関係のためにインターネットゲートウェイを作成した直後にルーティングルールを作成します。しかし、AWS CloudFormation はインターネットゲートウェイが VPC にアタッチされる前にルールを作成することがあります。この場合、エラーが発生します。そのため、ゲートウェイ - VPC アタッチメントで明示的に依存関係を定義する必要があります。
明示的な依存関係を作成するには、ルートの DependsOn
(*) ドットからゲートウェイ - VPC アタッチメントに線をドラッグします。
明示な依存性を作成する必要がある場合の詳細については「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 (コンポーネント)] 表示と [テンプレート] 表示の 2 つの表示方法があります。
テンプレート内の特定のセクションに簡単な調整を加えるには、[Components (コンポーネント)] ビューを使用します。[Components (コンポーネント)] ビューでは、編集可能なコンポーネントがタブに分割されます。これらのタブは、リソースを選択しているかどうかによって変わります。
たとえば、リソースを選択した場合、更新ポリシーや作成ポリシーなど、リソースのプロパティと属性を編集するタブが デザイナー に表示されます。何も選択していない場合、デザイナー はテンプレートのパラメーター、マッピング、条件、メタデータ、出力を編集するタブが表示されます。[Components (コンポーネント)] ビューで加えた変更は、すべて有効な JSON または YAML マークアップである必要があります。無効な JSON または YAML を導入した場合、[Components (コンポーネント)] ビューを終了するときに、デザイナー により無効なマークアップが有効なマークアップに戻されます。
テンプレートに幅広い変更を加えるには、[テンプレート] ビューを使用します。[テンプレート] ビューには、統合された JSON および YAML エディタ により、テンプレート全体の未加工の JSON または YAML が表示されます。リソースに変更を加える場合、[canvas] (キャンバス) ペインでリソースを選択します。デザイナーにより統合された JSON および YAML エディタでそのリソースが自動的にハイライトされます。
AWS CloudFormation デザイナーに統合された JSON および YAML エディタ
テンプレートを YAML または JSON に変換する
[Choose template language] (テンプレート言語の選択) で適切なラジオボタンを選択して、JSON と YAML の間で有効なテンプレートを変換したり元に戻したりできます。デザイナーは、有効な YAML または有効な JSON テンプレートのみを変換できます。変換に成功すると、[Messages (メッセージ)] ペインに次のようなメッセージが表示されます。テンプレートは YAML に正常に変換されました。
重要
デザイナー のテンプレートに #
YAML コメントを追加しないことをお勧めします。YAML テンプレートに #
コメントがある場合、デザイナー は YAML を編集したり JSON に変換したりするときにコメントを保持しません。デザイナー でテンプレートを編集または変更する場合 (たとえば、キャンバスにリソースをドラッグする場合)、コメントは失われます。
テンプレート言語を選択すると、キャンバスにドラッグした新しいリソースは、選択した言語で作成されます。別の言語に戻すには、テンプレートが有効であることを確認してから、[Choose template language] という YAML または JSON を選択します 。
注記
テンプレートを YAML に変換すると、デザイナー は関数に短い形式の表記法を使用します。例えば、- !GetAtt
と指定します。さらに、描画するビジュアルリンクはすべて、YAML モードで短い形式の表記法を使用します。組み込み関数の詳細については、「Ref」を参照してください。
オートコンプリート
統合された JSON および YAML エディタ には、リソースプロパティの指定に便利なオートコンプリート機能が備わっているため、プロパティ名を記憶する必要がありません。JSON テンプレートの有効なプロパティのリストを確認するには、次の例に示すように、Properties
の中括弧 ({}
) 内で [Ctrl+Space
] を押します。
YAML テンプレートの場合は、最初と最後の中括弧を削除し、[Enter
] キーを押して新しい行に移動できます。有効なプロパティのリストを確認するには、次の例に示すように、Properties
の後に新しい行の [Ctrl+Space
] を押します。
キーボードショートカット
デザイナー の 統合された JSON および YAML エディタ では、次のキーボードショートカットが用意されています。
- Ctrl+Space
-
リソースの
Properties
キー内に、そのリソースで使用可能なすべてのプロパティを一覧します。 - Ctrl+F
-
指定した値を検索します。
指定した値に一致するすべての値をハイライトするには、[
Alt+Enter
] を押します。
AWS CloudFormation デザイナーを使用してテンプレートを作成および更新する例については、以下のウォークスルーを参照してください。