メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

ウォークスルー: AWS CloudFormation デザイナー を使用して基本的なウェブサーバーを作成します。

AWS CloudFormation デザイナー は、テンプレートをグラフィカルに表示して、テンプレート内のリソースとその接続状況を知るのに役立ちます。統合された JSON および YAML エディタ は、AWS CloudFormation コンソールで直接テンプレートを簡単に変更することもできます。これらのコンポーネントを使用する方法のデモを行うために、AWS CloudFormation デザイナー を使用して VPC で基本的なウェブサーバーを構築します。次に、テンプレートを保存して AWS CloudFormation スタックを作成するのに使用します。ウォークスルーが終わるころには、次の例のようなテンプレートが完成します: https://console.aws.amazon.com/cloudformation/designer/home?templateUrl=https://s3.amazonaws.com/cloudformation-examples/sample-ec2-vpc.template&region=us-east-1

このウォークスルーでは、次のステップを完了します:

  1. リソースの追加と接続

    最初に AWS CloudFormation デザイナー を開いて、空のテンプレートを作成します。AWS CloudFormation デザイナー を使用して、VPC や EC2 インスタンスなどのリソースをテンプレートにドラッグし、テンプレートへの入力を開始します。それらの間にリンクも作成します。たとえば、AWS CloudFormation デザイナー を使用してインターネットゲートウェイと VPC 間に接続を作成します。

  2. テンプレートパラメーター、マッピング、出力を追加します。

    AWS CloudFormation デザイナー 統合されたエディタ を使用して、他のテンプレートコンポーネントを追加し、テンプレートをより便利なものにします。たとえば、テンプレートにパラメーターを追加して、スタックを作成するときに入力値を指定できるようにします。この方法では、通常変更するプロパティ値のテンプレートを常に編集する必要がなくなります。

  3. リソースプロパティを指定します。

    ここでは、統合されたエディタ をもう一度使用して、リソースの設定を指定します。

  4. リソースのプロビジョニング

    スタックを作成するまで、リソーステンプレートは起動され実行されることはありません。ここでは、AWS CloudFormation スタックを起動するために作成したテンプレートを使用します。これは、テンプレートで定義されているすべてのリソースをプロビジョニングします。

    注記

    AWS CloudFormation は無料サービスです。ただし、スタックに追加する AWS リソースには現在の料金が課金されます。AWS の料金の詳細については、http://aws.amazon.com で各製品の詳細ページを参照してください。

前提条件

このウォークスルーは、Amazon Virtual Private Cloud (Amazon VPC)、Amazon Elastic Compute Cloud、(Amazon EC2)、および AWS CloudFormation に精通されていることが前提となります。コンテキストでは、それぞれの手順でリソースに関する基本情報について説明します。

また開始前に、スタックを作成するリージョンに Amazon EC2 キーペアがあることを確認してください。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Amazon EC2 Key Pairs」を参照してください。

ステップ 1: リソースの追加と接続

AWS CloudFormation デザイナー ドラッグアンドドロップインターフェイスを使用して、Amazon EC2 インスタンスと、VPC、サブネット、ルートテーブル、インターネットゲートウェイのような、ネットワークリソースを追加します。すべてのリソースを追加したら、その間に接続を作成します。たとえば、インターネットゲートウェイと VPC を関連付けます。

リソースをテンプレートに追加するには

  1. AWS CloudFormation デザイナー を https://console.aws.amazon.com/cloudformation/designer で開きます。

  2. 統合されたエディタ で、ページの下半分にある [Edit] ( )をクリックします。

  3. テンプレート名を BasicWebServerInVPC に変更し、[Enter] を押します。

    現在、有効でない空のテンプレートがあります。次のステップでは、リソースを追加してテンプレートを有効にします。

  4. [Resource types] ペインで、[EC2] カテゴリから [VPC] リソースタイプを [Canvas] ペインにドラッグします。

    リソースは、リソースのカテゴリに整理されます。ここで追加するリソースはすべて、[EC2] カテゴリにあります。

    AWS CloudFormation デザイナー は、テンプレートを直ちに変更して VPC リソースを含めて、次の JSON スニペットに似た結果を生じさせます。

    Copy
    "Resources": { "VPC431KO": { "Type": "AWS::EC2::VPC", "Properties": {}, "Metadata": { "AWS::CloudFormation::Designer": { "id": "445730ea-0d11-45ba-b6ac-12345EXAMPLE" } } } }

    YAML スニペットは、以下のような内容です。

    Copy
    Resources: VPC431KO: Type: 'AWS::EC2::VPC' Properties: {} Metadata: 'AWS::CloudFormation::Designer': id: 9430b008-7a03-41ed-b63e-12345EXAMPLE

    なお、VPC の CIDR ブロックのような VPC プロパティを指定する必要があることに注意してください。これについては、後で行います。これは、追加するすべてのリソースに当てはまります。

  5. VPC の名前を変更します。

    注記

    リソースの名前を変更するときは、論理 ID の名前も変更します。これはテンプレート参照される名前です (AWS CloudFormation がリソースを作成した時に割り当てられる名前ではありません)。詳細については、「リソース」を参照してください。

    1. VPC リソースを選択します。

    2. 統合されたエディタ で、[Edit] アイコン ( )をクリックします。

    3. 名前を VPC に変更して、[Enter] を選択します。

    次に、VPC にリソースを追加します。

  6. VPC リソースの角をドラッグして拡張し、複数の追加リソースに十分な大きさにします。

    ウェブサイトをホストする EC2 インスタンスを追加することはできないため、サブネットを VPC に直接追加する必要があります。インスタンスはサブネットになければなりません。

  7. [Subnet] リソースタイプを VPC 内に追加して、その名前を PublicSubnet に変更します。

    サブネットを使用して、他の AWS リソースと関連付ける Amazon EC2 インスタンスなどの VPC の IP アドレスの範囲を割り当てます。

    VPC 内にサブネットを追加すると、AWS CloudFormation デザイナー は自動的に VPC とサブネットを関連付けます。この関連付けはコンテナモデルで、コンテナ内のリソースがコンテナリソースに自動的に関連付けられます。

  8. [Instance] リソースタイプを PublicSubnet リソース内に追加して、その名前を WebServerInstance に変更します。

    インスタンスは、基本的なウェブサイトをホストする仮想コンピューティング環境です。サブネットおよび VPC の動作方法と同様に、サブネットにインスタンスを追加すると、サブネットがインスタンスに自動的に関連付けられます。

  9. [SecurityGroup] リソースタイプを VPC 内に追加して、その名前を WebServerSecurityGroup に変更します。

    セキュリティグループは、ウェブサーバーインスタンスのインバウンドトラフィックとアウトバウンドトラフィックを制御する仮想ファイアウォールです。また、VPC のインスタンスにも必要です。ここでは、ウェブサーバーのインスタンスとこのセキュリティグループを関連付ける必要があります。これは、後でインスタンスのプロパティを指定するときに行います。

  10. [InternetGateway] リソースタイプを VPC 外のいずれかの場所に追加して、その名前を InternetGateway に変更します。

    インターネットゲートウェイは、VPC とインターネット内にあるインスタンス間の通信を有効にします。インターネットゲートウェイがないと、他のウェブサイトにアクセスできなくなります。

    VPC 内でインターネットゲートウェイをドラッグすることができますが、これは VPC との連携は作成しません。インターネットゲートウェイはコンテナモデルには従っていません。代わりに、次のステップで説明するインターネットゲートウェイから VPC への接続をドラッグする必要があります。

  11. InternetGateway リソースと VPC リソース間の接続を作成します。

    1. InternetGateway リソースで、インターネットゲートウェイアタッチメント (AWS::EC2::VPCGatewayAttachment) の上にマウスを移動します。

    2. VPC への接続をドラッグします。

      有効な対象リソースの境界の色が変わります。この場合、VPC は唯一の有効な対象リソースです。この接続は、VPC とインターネットゲートウェイとを関連付けるアタッチメントリソースを作成します。

  12. 次に、ルートテーブルとルートを追加して、サブネット内からのネットワークトラフィックをルーティングする方法を指定する必要があります。VPC 内に [RouteTable] を追加して、その名前を PublicRouteTable に変更します。

    これにより、VPC に新しいルートテーブルが関連付けられます。

  13. ルーティングルールをルートテーブルに追加するには、[Route] リソースタイプを PublicRouteTable リソース内に追加し、その名前を PublicRoute に変更します。

    ルートを使用して、トラフィックをルーティングする場所を指定します。

  14. パブリックルートでは、インターネットゲートウェイを宛先とします。GatewayId を使用して PublicRoute リソースからインターネットのゲートウェイへの接続を作成します。これは、インターネットゲートウェイと VPC 間の接続で作成した方法と同様です。

    AWS CloudFormation は、インターネットゲートウェイを VPC と関連付けなければ、インターネットゲートウェイをルートと関連付けることができません。これは、次のステップで説明するように、インターネットゲートウェイ - VPC アタッチメントに明示的な依存性を作成する必要があることを意味します。詳細については、「DependsOn 属性」を参照してください。

  15. PublicRoute リソースとインターネットゲートウェイ - VPC アタッチメント間に明示依存性を作成します。

    1. PublicRoute リソースで、DependsOn のドット上にマウスを移動します。

    2. インターネットゲートウェイ - VPC アタッチメント (AWS::EC2::VPCGatewayAttachment) に接続をドラッグします。

      DependsOn 接続を介して、AWS CloudFormation デザイナー は発信元リソースが対象リソースに依存する依存関係 (DependsOn 属性) を作成します。この場合、AWS CloudFormation デザイナー は DependsOn 属性を PublicRoute リソースに追加し、依存性としてゲートウェイ ‐ VPC アタッチメントを指定します。

  16. WebServerInstance リソースから PublicRoute リソースへの別の依存性を作成します。

    WebServerInstance リソースは、パブリックルートに依存してトラフィックをインターネットにルーティングします。パブリックルートがない場合、インスタンスは信号を送信して (cfn-signal ヘルパースクリプトを使用)、AWS CloudFormation に対してインスタンス設定とアプリケーションのデプロイが完了したことを通知できません。

  17. ルートテーブルとサブネットを関連付けるには、PublicRouteTable リソースから PublicSubnet リソースへ接続をドラッグしてください。

    これで、パブリックサブネットはパブリックルートテーブルを使用してトラフィックをルーティングできるようになります。

  18. AWS CloudFormation デザイナー ツールバーで、[File] メニュー (ファイルアイコン) を使ってテンプレートをローカルへ保存します。。

    AWS CloudFormation デザイナー は、ハードドライブにテンプレートを保存します。後でテンプレートを使用して、スタックを作成できます。変更内容が失われないよう、テンプレートを定期的に保存することをお勧めします。

このステップでは、テンプレートに 7 つのリソースを追加して、その論理 ID とや一般名を変更しました。また、ほとんどのリソースにビジュアルな接続を確立して、関連付けや依存性を作成しました。ただし、このテンプレートにスタックを作成する前に、いくつかの接続 (セキュリティグループとインスタンスの関連付けなど) を作成して、各リソースにプロパティを指定する必要があります。次のステップでは、AWS CloudFormation デザイナー 統合されたエディタ を使用して、入力パラメータのようなテンプレートの他のコンポーネントを変更する方法について説明します。

ステップ 2: のパラメーター、マッピング、出力の追加

リソースプロパティを指定する前に、他のテンプレートコンポーネントを追加して、複数の環境でテンプレートを簡単に再利用する必要があります。このステップでは、AWS CloudFormation デザイナー 統合されたエディタ を使用してパラメータ、マッピング、出力を追加します。次に、リソースプロパティを指定するときに、これらのパラメーターやマッピングを参照できます。チュートリアルでは、統合されたエディタ にコピーして貼り付けられるサンプル JSON および YAML が提供されます。

パラメーターを追加するには

パラメーターは、スタックを作成するときに指定する入力値です。これらは、テンプレートにハードコードされた値がない状態で値を渡すのに役立ちます。たとえば、ウェブサーバーのインスタンスタイプをテンプレートでハードコーディングする必要はありません。代わりに、スタックを作成するときに、パラメーターを使用してインスタンスタイプを指定できます。このように、同じテンプレートを使用して、異なるインスタンスタイプを持つ複数のウェブサーバーを作成できます。詳細については、「Parameters」を参照してください。

  1. AWS CloudFormation デザイナー キャンバスのオープンエリアをクリックします。

    選択した内容により、統合されたエディタ は、編集可能なテンプレートレベルまたはリソースレベルのコンポーネントを表示します。テンプレートレベルでは、テンプレートパラメーター、マッピング、出力など、テンプレートのリソースセクション以外のすべてのセクションを編集できます。リソースレベルでは、リソースプロパティと属性を編集できます。

    キャンバスのオープンエリアをクリックすると、テンプレートレベルのコンポーネントを編集することができます。リソースレベルのコンポーネントを編集するには、リソースを選択します。

  2. 統合されたエディタ ペインで、[Components] ビューの [Parameters] タブを選択します。

  3. 次のスニペットのパラメーターをコピーして、統合されたエディタ に貼り付けます。

    次の JSON スニペットは、ウェブサーバーのインスタンスタイプ、ウェブサーバーへの SSH アクセスのための Amazon EC2 キーペアの名前、SSH を使用してウェブサーバーにアクセスするのに使用できる IP アドレス範囲を指定するためのパラメータを追加します。

    Copy
    { "Parameters": { "InstanceType": { "Description": "WebServer EC2 instance type", "Type": "String", "Default": "t2.micro", "AllowedValues": [ "t1.micro", "t2.micro", "t2.small", "t2.medium", "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "m3.medium", "m3.large", "m3.xlarge", "m3.2xlarge", "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", "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." }, "KeyName": { "Description": "Name of an EC2 KeyPair to enable SSH access to the instance.", "Type": "AWS::EC2::KeyPair::KeyName", "ConstraintDescription": "must be the name of an existing EC2 KeyPair." }, "SSHLocation": { "Description": " The IP address range that can be used to access the web server using SSH.", "Type": "String", "MinLength": "9", "MaxLength": "18", "Default": "0.0.0.0/0", "AllowedPattern": "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})", "ConstraintDescription": "must be a valid IP CIDR range of the form x.x.x.x/x." } } }

    YAML での同じスニペットを次に示します。

    Copy
    Parameters: InstanceType: Description: WebServer EC2 instance type Type: String Default: t2.micro AllowedValues: - t1.micro - t2.micro - t2.small - t2.medium - m1.small - m1.medium - m1.large - m1.xlarge - m2.xlarge - m2.2xlarge - m2.4xlarge - m3.medium - m3.large - m3.xlarge - m3.2xlarge - 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 - 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. KeyName: Description: Name of an EC2 KeyPair to enable SSH access to the instance. Type: 'AWS::EC2::KeyPair::KeyName' ConstraintDescription: must be the name of an existing EC2 KeyPair. SSHLocation: Description: ' The IP address range that can be used to access the web server using SSH.' Type: String MinLength: '9' MaxLength: '18' Default: 0.0.0.0/0 AllowedPattern: '(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})' ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.

マッピングを追加するには

マッピングは、名前と値のペアに関連付けられる一連のキーです。これらは、入力パラメーター値に基づいて値を指定する場合に役立ちます。このウォークスルーでは、マッピングを使用して、インスタンスタイプに基づく EC2 インスタンスの AMI ID、およびスタックを作成するリージョンを指定します。詳細については、「Mappings」を参照してください。

  1. 統合されたエディタ ペインで、[Mappings] タブを選択します。

  2. 以下の JSON マッピングをコピーし、統合されたエディタ に貼り付けます。

    Copy
    { "Mappings": { "AWSInstanceType2Arch" : { "t1.micro" : { "Arch" : "PV64" }, "t2.micro" : { "Arch" : "HVM64" }, "t2.small" : { "Arch" : "HVM64" }, "t2.medium" : { "Arch" : "HVM64" }, "m1.small" : { "Arch" : "PV64" }, "m1.medium" : { "Arch" : "PV64" }, "m1.large" : { "Arch" : "PV64" }, "m1.xlarge" : { "Arch" : "PV64" }, "m2.xlarge" : { "Arch" : "PV64" }, "m2.2xlarge" : { "Arch" : "PV64" }, "m2.4xlarge" : { "Arch" : "PV64" }, "m3.medium" : { "Arch" : "HVM64" }, "m3.large" : { "Arch" : "HVM64" }, "m3.xlarge" : { "Arch" : "HVM64" }, "m3.2xlarge" : { "Arch" : "HVM64" }, "c1.medium" : { "Arch" : "PV64" }, "c1.xlarge" : { "Arch" : "PV64" }, "c3.large" : { "Arch" : "HVM64" }, "c3.xlarge" : { "Arch" : "HVM64" }, "c3.2xlarge" : { "Arch" : "HVM64" }, "c3.4xlarge" : { "Arch" : "HVM64" }, "c3.8xlarge" : { "Arch" : "HVM64" }, "c4.large" : { "Arch" : "HVM64" }, "c4.xlarge" : { "Arch" : "HVM64" }, "c4.2xlarge" : { "Arch" : "HVM64" }, "c4.4xlarge" : { "Arch" : "HVM64" }, "c4.8xlarge" : { "Arch" : "HVM64" }, "g2.2xlarge" : { "Arch" : "HVMG2" }, "r3.large" : { "Arch" : "HVM64" }, "r3.xlarge" : { "Arch" : "HVM64" }, "r3.2xlarge" : { "Arch" : "HVM64" }, "r3.4xlarge" : { "Arch" : "HVM64" }, "r3.8xlarge" : { "Arch" : "HVM64" }, "i2.xlarge" : { "Arch" : "HVM64" }, "i2.2xlarge" : { "Arch" : "HVM64" }, "i2.4xlarge" : { "Arch" : "HVM64" }, "i2.8xlarge" : { "Arch" : "HVM64" }, "d2.xlarge" : { "Arch" : "HVM64" }, "d2.2xlarge" : { "Arch" : "HVM64" }, "d2.4xlarge" : { "Arch" : "HVM64" }, "d2.8xlarge" : { "Arch" : "HVM64" }, "hi1.4xlarge" : { "Arch" : "HVM64" }, "hs1.8xlarge" : { "Arch" : "HVM64" }, "cr1.8xlarge" : { "Arch" : "HVM64" }, "cc2.8xlarge" : { "Arch" : "HVM64" } }, "AWSRegionArch2AMI" : { "us-east-1" : {"PV64" : "ami-1ccae774", "HVM64" : "ami-1ecae776", "HVMG2" : "ami-8c6b40e4"}, "us-west-2" : {"PV64" : "ami-ff527ecf", "HVM64" : "ami-e7527ed7", "HVMG2" : "ami-abbe919b"}, "us-west-1" : {"PV64" : "ami-d514f291", "HVM64" : "ami-d114f295", "HVMG2" : "ami-f31ffeb7"}, "eu-west-1" : {"PV64" : "ami-bf0897c8", "HVM64" : "ami-a10897d6", "HVMG2" : "ami-d5bc24a2"}, "eu-central-1" : {"PV64" : "ami-ac221fb1", "HVM64" : "ami-a8221fb5", "HVMG2" : "ami-7cd2ef61"}, "ap-northeast-1" : {"PV64" : "ami-27f90e27", "HVM64" : "ami-cbf90ecb", "HVMG2" : "ami-6318e863"}, "ap-southeast-1" : {"PV64" : "ami-acd9e8fe", "HVM64" : "ami-68d8e93a", "HVMG2" : "ami-3807376a"}, "ap-southeast-2" : {"PV64" : "ami-ff9cecc5", "HVM64" : "ami-fd9cecc7", "HVMG2" : "ami-89790ab3"}, "sa-east-1" : {"PV64" : "ami-bb2890a6", "HVM64" : "ami-b52890a8", "HVMG2" : "NOT_SUPPORTED"}, "cn-north-1" : {"PV64" : "ami-fa39abc3", "HVM64" : "ami-f239abcb", "HVMG2" : "NOT_SUPPORTED"} } } }

    YAML での同じマッピングを次に示します。

    Copy
    Mappings: AWSInstanceType2Arch: t1.micro: Arch: PV64 t2.micro: Arch: HVM64 t2.small: Arch: HVM64 t2.medium: Arch: HVM64 m1.small: Arch: PV64 m1.medium: Arch: PV64 m1.large: Arch: PV64 m1.xlarge: Arch: PV64 m2.xlarge: Arch: PV64 m2.2xlarge: Arch: PV64 m2.4xlarge: Arch: PV64 m3.medium: Arch: HVM64 m3.large: Arch: HVM64 m3.xlarge: Arch: HVM64 m3.2xlarge: Arch: HVM64 c1.medium: Arch: PV64 c1.xlarge: Arch: PV64 c3.large: Arch: HVM64 c3.xlarge: Arch: HVM64 c3.2xlarge: Arch: HVM64 c3.4xlarge: Arch: HVM64 c3.8xlarge: Arch: HVM64 c4.large: Arch: HVM64 c4.xlarge: Arch: HVM64 c4.2xlarge: Arch: HVM64 c4.4xlarge: Arch: HVM64 c4.8xlarge: Arch: HVM64 g2.2xlarge: Arch: HVMG2 r3.large: Arch: HVM64 r3.xlarge: Arch: HVM64 r3.2xlarge: Arch: HVM64 r3.4xlarge: Arch: HVM64 r3.8xlarge: Arch: HVM64 i2.xlarge: Arch: HVM64 i2.2xlarge: Arch: HVM64 i2.4xlarge: Arch: HVM64 i2.8xlarge: Arch: HVM64 d2.xlarge: Arch: HVM64 d2.2xlarge: Arch: HVM64 d2.4xlarge: Arch: HVM64 d2.8xlarge: Arch: HVM64 hi1.4xlarge: Arch: HVM64 hs1.8xlarge: Arch: HVM64 cr1.8xlarge: Arch: HVM64 cc2.8xlarge: Arch: HVM64 AWSRegionArch2AMI: us-east-1: PV64: ami-1ccae774 HVM64: ami-1ecae776 HVMG2: ami-8c6b40e4 us-west-2: PV64: ami-ff527ecf HVM64: ami-e7527ed7 HVMG2: ami-abbe919b us-west-1: PV64: ami-d514f291 HVM64: ami-d114f295 HVMG2: ami-f31ffeb7 eu-west-1: PV64: ami-bf0897c8 HVM64: ami-a10897d6 HVMG2: ami-d5bc24a2 eu-central-1: PV64: ami-ac221fb1 HVM64: ami-a8221fb5 HVMG2: ami-7cd2ef61 ap-northeast-1: PV64: ami-27f90e27 HVM64: ami-cbf90ecb HVMG2: ami-6318e863 ap-southeast-1: PV64: ami-acd9e8fe HVM64: ami-68d8e93a HVMG2: ami-3807376a ap-southeast-2: PV64: ami-ff9cecc5 HVM64: ami-fd9cecc7 HVMG2: ami-89790ab3 sa-east-1: PV64: ami-bb2890a6 HVM64: ami-b52890a8 HVMG2: NOT_SUPPORTED cn-north-1: PV64: ami-fa39abc3 HVM64: ami-f239abcb HVMG2: NOT_SUPPORTED

出力を追加するには

出力は、describe stacks API 呼び出し、または AWS CloudFormation コンソールスタックの[Outputs] タブで使用できる値を宣言します。このウォークスルーでは、作成後に簡単に自分のウェブサイトを見られるように、ウェブサイトの URL を出力します。詳細については、「出力」を参照してください。

  1. 統合されたエディタ ペインで、[Outputs] タブを選択します。

  2. 以下の JSON 出力をコピーし、統合されたエディタ に貼り付けます。

    出力は Fn::GetAtt 組込み関数を使用して、ウェブサーバーインスタンスのパブリック IP を取得します。

    Copy
    { "Outputs": { "URL": { "Value": { "Fn::Join": [ "", [ "http://", { "Fn::GetAtt": [ "WebServerInstance", "PublicIp" ] } ] ] }, "Description": "Newly created application URL" } } }

    YAML での同じ出力を次に示します。

    Copy
    Outputs: URL: Value: !Join - '' - - 'http://' - !GetAtt - WebServerInstance - PublicIp Description: Newly created application URL
  3. 変更内容を失わないように、テンプレートを再度保存します。前のセクションで作成した同じファイルに、変更内容を安全に保存できます。

これで、テンプレートパラメーター、マッピングおよび出力が用意され、リソースプロパティを指定できるようになりました。

ステップ 3: リソースプロパティを指定する

多くのリソースで、ウェブサーバーを使用するためのインスタンスタイプのような、設定を定義するプロパティが必要です。前のステップで行ったのと同様に、AWS CloudFormation デザイナー 統合されたエディタ を使用してリソースプロパティを指定します。コピーして 統合されたエディタ に貼り付けられるサンプルの JSON および YAML を提供します。

リソースプロパティを指定するには

  1. AWS CloudFormation デザイナー キャンバスで、VPC リソースを選択します。

    統合されたエディタ は、リソースプロパティや属性など、編集可能なリソースレベルのコンポーネントを表示します。

  2. 統合されたエディタ ペインで、[Properties] タブを選択します。

  3. 次の JSON スニペットをコピーして 統合されたエディタ の [Properties] の括弧 ({}) の間に貼り付けます。

    この例では、VPC の DNS 設定および CIDR ブロックを指定します。

    Copy
    "EnableDnsSupport": "true", "EnableDnsHostnames": "true", "CidrBlock": "10.0.0.0/16"

    YAML の場合は、Properties: の後に新しい行を入力し、以下のスニペットを貼り付けます。

    Copy
    EnableDnsSupport: 'true' EnableDnsHostnames: 'true' CidrBlock: 10.0.0.0/16

    注記

    効率性を考慮して、コピー & ペーストが可能な JSON および YAML スニペットを提供します。ただし、テキストエディタには、手動で各プロパティを指定するのに使用できる、自動完了機能があります。詳細については、「統合された JSON および YAML エディタ」を参照してください。

  4. 次のリソースでこのプロセスを繰り返します。

    PublicSubnet

    VPC ID プロパティの後に、次の CIDR ブロックプロパティを追加します。VPC 内でサブネットがドラッグされると、AWS CloudFormation デザイナー が自動的に VPC ID のプロパティを追加しました。

    注記

    AWS CloudFormation デザイナー が自動的に作成した、他のいくつかの関連付けを確認できます。太字になっている、新しいプロパティを追加します。

    JSON

    Copy
    "VpcId": { "Ref": "VPC" }, "CidrBlock": "10.0.0.0/24"

    YAML

    Copy
    VpcId: !Ref VPC CidrBlock: 10.0.0.0/24
    PublicRoute

    すべてのトラフィックをインターネットゲートウェイへ誘導する、次の送信先 CIDR ブロックプロパティを追加します。

    JSON

    Copy
    "DestinationCidrBlock": "0.0.0.0/0", "RouteTableId": { "Ref": "PublicRouteTable" }, "GatewayId": { "Ref": "InternetGateway" }

    YAML

    Copy
    DestinationCidrBlock: 0.0.0.0/0 RouteTableId: !Ref PublicRouteTable GatewayId: !Ref InternetGateway
    WebServerSecurityGroup

    どのトラフィックがウェブサーバーインスタンスに到達できるかを決定する、次のインバウンドルールを追加します。このルールは、スタックの作成時にパラメーター値として指定する、すべての HTTP トラフィックと特定の SSH トラフィックを許可します。

    JSON

    Copy
    "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

    Copy
    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
    WebServerInstance

    ウェブサーバーインスタンスの多数のプロパティを指定する必要がありますので、デモのためにそのいくつかを強調表示しています。InstanceType プロパティと ImageId プロパティは、前のセクションで指定したパラメーターやマッピング値を使用します。スタックの作成時に、パラメーター値としてインスタンスタイプを指定します。ImageId 値は、スタックのリージョンと指定したインスタンスタイプに基づくマッピングです。

    NetworkInterfaces プロパティは、ウェブサーバーのインスタンスで使用できるネットワーク設定を指定します。このプロパティで、インスタンスにセキュリティグループとサブネットを関連付けることができます。AWS CloudFormation デザイナー は SubnetId プロパティを使用してサブネットとインスタンスを関連付けますが、NetworkInterfaces を使用する必要があります。それがウェブサーバーにパブリック IP を付与する唯一の方法だからです。NetworkInterfaces プロパティを指定すると、そのプロパティ内でサブネットとセキュリティグループを指定する必要があります。

    UserData プロパティで、インスタンスが起動して実行されたら実行する、設定スクリプトを指定します。すべての設定情報は、次のステップで追加するインスタンスのメタデータに定義されます。

    すべてのプロパティを次のスニペットに置き換えます:

    重要

    既存のプロパティにこのスニペットを追加しないでください。

    JSON

    Copy
    "InstanceType": { "Ref": "InstanceType" }, "ImageId": { "Fn::FindInMap": [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ] } ] }, "KeyName": { "Ref": "KeyName" }, "NetworkInterfaces": [ { "GroupSet": [ { "Ref": "WebServerSecurityGroup" } ], "AssociatePublicIpAddress": "true", "DeviceIndex": "0", "DeleteOnTermination": "true", "SubnetId": { "Ref": "PublicSubnet" } } ], "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -xe\n", "yum install -y aws-cfn-bootstrap\n", "# Install the files and packages from the metadata\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerInstance ", " --configsets All ", " --region ", { "Ref": "AWS::Region" }, "\n", "# Signal the status from cfn-init\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerInstance ", " --region ", { "Ref": "AWS::Region" }, "\n" ] ] } }

    YAML

    Copy
    InstanceType: !Ref InstanceType ImageId: !FindInMap - AWSRegionArch2AMI - !Ref 'AWS::Region' - !FindInMap - AWSInstanceType2Arch - !Ref InstanceType - Arch KeyName: !Ref KeyName NetworkInterfaces: - GroupSet: - !Ref WebServerSecurityGroup AssociatePublicIpAddress: 'true' DeviceIndex: '0' DeleteOnTermination: 'true' SubnetId: !Ref PublicSubnet UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -xe - | yum install -y aws-cfn-bootstrap - | # Install the files and packages from the metadata - '/opt/aws/bin/cfn-init -v ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerInstance ' - ' --configsets All ' - ' --region ' - !Ref 'AWS::Region' - |+ - | # Signal the status from cfn-init - '/opt/aws/bin/cfn-signal -e $? ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerInstance ' - ' --region ' - !Ref 'AWS::Region' - |+
  5. ウェブサーバー設定メタデータを WebServerInstance リソースに追加します。

    1. WebServerInstance リソースを選択し、次に 統合されたエディタ ペインの [Metadata] タブを選択します。

    2. JSON でテンプレートを記述する場合: Metadata の中括弧 ({}) の中と、AWS::CloudFormation::Designer の閉じ括弧の後に、カンマ (,) を追加します。

    3. AWS::CloudFormation::Designer プロパティの後に次のスニペットを追加します。これは、cfn-init ヘルパースクリプトにウェブサーバーの起動と基本的なウェブページの作成を命令します。

      JSON

      Copy
      "AWS::CloudFormation::Init" : { "configSets" : { "All" : [ "ConfigureSampleApp" ] }, "ConfigureSampleApp" : { "packages" : { "yum" : { "httpd" : [] } }, "files" : { "/var/www/html/index.html" : { "content" : { "Fn::Join" : ["\n", [ "<h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1>" ]]}, "mode" : "000644", "owner" : "root", "group" : "root" } }, "services" : { "sysvinit" : { "httpd" : { "enabled" : "true", "ensureRunning" : "true" } } } } }

      YAML

      Copy
      'AWS::CloudFormation::Init': configSets: All: - ConfigureSampleApp ConfigureSampleApp: packages: yum: httpd: [] files: /var/www/html/index.html: content: !Join - |+ - - >- <h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1> mode: '000644' owner: root group: root services: sysvinit: httpd: enabled: 'true' ensureRunning: 'true'
  6. [AWS CloudFormation デザイナー] ツールバーで、[Validate template] ( ) を選択して、テンプレートに構文エラーがないか確認します。

    [Messages] ペインでエラーを表示して修正し、テンプレートを再度検証します。エラーが表示されない場合、テンプレートの構文は有効です。

  7. 行ったすべての変更を保持するために、完成したテンプレートを保存します。

これで、完全な AWS CloudFormation テンプレートが完成し、VPC 内で基本的なウェブサーバーを作成するのに使用できます。テンプレートを作成するには、AWS CloudFormation デザイナー キャンバスペインを使用して、最初にテンプレートリソースを追加して接続します。次に、統合されたエディタ を使用して、その他のテンプレートコンポーネントを追加し、リソースプロパティを指定します。次のステップでは、このテンプレートを使用してスタックを作成します。

ステップ 4: リソースのプロビジョニング

スタックを作成するには、AWS CloudFormation スタック作成ウィザードを AWS CloudFormation デザイナー から起動します。前のステップで作成したテンプレートを使用して、AWS CloudFormation スタックを作成します。AWS CloudFormation がすべてのリソースのプロビジョニングを行った後で、基本的なウェブサイトを起動して実行します。

スタックを作成するには

  1. AWS CloudFormation デザイナー ツールバーで、[Create Stack](クラウドのアイコン) を選択します。

    AWS CloudFormation デザイナー は S3 バケットで開かれたテンプレートを保存し、AWS CloudFormation スタック作成ウィザードを起動します。AWS CloudFormation は、テンプレートがアップロードされるたびに、作成するリージョンと同じ S3 バケットを使用します。

  2. AWS CloudFormation が自動的にテンプレート URL を入力します。[Next] を選択します。

  3. [Specify Details] セクションでは、[Stack name] フィールドにスタックの名前を入力します。この例では、BasicWebServerStack を使用します。

  4. [Parameters] セクションでは、[KeyName] フィールドに、スタックを作成するのと同じリージョン内の有効な Amazon EC2 キーペアの名前を入力します。

  5. 他のデフォルトのパラメータ値をそのまま使用し、[Next] を選択します。

  6. このチュートリアルでは、タグの追加も詳細設定の指定も不要です。[Next] を選択します。

  7. スタック名と Amazon EC2 キーペア名が正しいことを確認し、[Create] を選択します。

AWS CloudFormation がスタックを作成するのに、数分かかります。進捗状況を監視するには、スタックイベントを確認します。スタックイベントの表示の詳細については、「スタックのデータとリソースの表示」を参照してください。スタックが作成されると、スタックの出力を確認し、サンプルウェブサイトの URL に移動してウェブサイトが実行中であることを確認します。詳細については、「スタックのデータとリソースの表示」を参照してください。

これで、AWS CloudFormation デザイナー を使用してテンプレートを作成し、スタックを起動できました。以下の「ウォークスルー: AWS CloudFormation デザイナー を使用してスタックのテンプレートを変更します。」のウォークスルーでこのスタックを使用します。ここでは、スケーラブルなウェブサーバーを作成できるように、テンプレートを変更します。