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

ご利用開始にあたって

適切なテンプレートを使用すると、アプリケーションに必要なすべての AWS リソースを迅速にデプロイすることができます。このセクションでは、WordPress ブログのリソースの宣言、スタックとしての WordPress ブログの作成、スタック作成プロセスの監視、スタック上のリソースの検査、およびスタックの削除を行うテンプレートについて詳しく説明します。これらのタスクを行うには、AWS マネジメントコンソール を使用します。

ステップ 1: テンプレートの選択

まず、スタックで必要なリソースを指定するテンプレートが必要です。この手順では、既に用意されているサンプルテンプレートを使用します。サンプルテンプレートは、ストレージ用ローカル MySQL データベースを使って、単一の Amazon EC2 インスタンスを使用する基本 WordPress ブログを作成します。このテンプレートでは、Amazon EC2 インスタンスのファイアウォール設定を制御するために Amazon EC2 セキュリティグループを作成します。

重要

AWS CloudFormation は無料ですが、AWS CloudFormation が作成する AWS リソースは実動のものです (サンドボックス環境では実行されません)。このチュートリアルにある最後のタスクで AWS リソースを終了するまで、標準使用料が発生します。合計料金はごくわずかです。料金を最小限に抑える方法については、http://aws.amazon.com/free/ を参照してください。

テンプレートを表示するには

  • JSON、または YAML の WordPress サンプルテンプレートを表示できます。テンプレートの URL は、このガイドの後半で使用するため、ここでダウンロードする必要はありません。テンプレート形式の詳細については、「AWS CloudFormation テンプレート形式」を参照してください。

テンプレートは、スタックで作成する AWS リソースの設定情報を含む JSON または YAML テキストファイルです。このチュートリアルでは、6 つの最上位セクション (AWSTemplateFormatVersionDescriptionParametersMappingsResourcesOutputs) がありますが、必要なのは Resources セクションだけです。

Resources セクションには、テンプレートで作成する AWS リソースの定義が含まれます。各リソースは個別にリストされ、その特定のリソースの作成に必要なプロパティを指定します。次のリソース宣言は、EC2 インスタンスの設定です。この例では論理名 WebServer が含まれています。

例 JSON

Copy
"Resources" : { ... "WebServer": { "Type" : "AWS::EC2::Instance", "Properties": { "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, "InstanceType" : { "Ref" : "InstanceType" }, "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ], "KeyName" : { "Ref" : "KeyName" }, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -xe\n", "yum update -y aws-cfn-bootstrap\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource WebServer ", " --configsets wordpress_install ", " --region ", { "Ref" : "AWS::Region" }, "\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource WebServer ", " --region ", { "Ref" : "AWS::Region" }, "\n" ]]}} }, ... }, ... "WebServerSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable HTTP access via port 80 locked down to the load balancer + SSH access", "SecurityGroupIngress" : [ {"IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0"}, {"IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : { "Ref" : "SSHLocation"}} ] } }, ... },

例 YAML

Copy
Resources: ... WebServer: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap [AWSRegionArch2AMI, !Ref 'AWS::Region', !FindInMap [AWSInstanceType2Arch, !Ref InstanceType, Arch]] InstanceType: Ref: InstanceType KeyName: Ref: KeyName SecurityGroups: - Ref: WebServerSecurityGroup UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum update -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackId} --resource WebServer --configsets wordpress_install --region ${AWS::Region} /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackId} --resource WebServer --region ${AWS::Region} ... ... WebServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: "Enable HTTP access via port 80 locked down to the load balancer + SSH access" SecurityGroupIngress: - CidrIp: 0.0.0.0/0 FromPort: '80' IpProtocol: tcp ToPort: '80' - CidrIp: !Ref SSHLocation FromPort: '22' IpProtocol: tcp ToPort: '22' ...

以前に EC2 インスタンスを作成したことがある場合は、インスタンスの設定を決定する、ImageIdInstanceTypeKeyName などのプロパティに気が付くでしょう。リソース宣言は、これらすべての設定を一度に指定するための効率的な方法です。テンプレートでリソースを宣言すると、テンプレートを使用してスタックを作成することによって、宣言したすべてのリソースを簡単に作成および設定することができます。同じ設定のリソースを起動するには、同じテンプレートを使用する新しいスタックを作成するだけで済みます。

リソース宣言は、リソースの論理名を指定する文字列で開始されます。後で説明するように、テンプレート内のリソースを参照するために、論理名を使用できます。

スタックを作成する際にテンプレートに渡すことができる値を宣言するために、Parameters セクションを使用します。パラメーターは、ユーザー名やパスワードなど、テンプレート自体には格納したくない機密情報を指定する方法としても効果的です。これは、特定のアプリケーションに固有の情報や、デプロイしている設定 (たとえば、ドメイン名やインスタンスタイプ) を指定する方法でもあります。このセクションの後の方で WordPress スタックを作成するときに、テンプレートで宣言されている一連のパラメーターが Create Stack ウィザードの [Specify Details] ページに表示されます。このページで、スタックを作成する前にパラメーターを設定できます。

テンプレートでは、EC2 インスタンスのプロパティで使用される値を指定するために、次のパラメーターが使用されています。

例 JSON

Copy
"Parameters" : { ... "KeyName": { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances", "Type": "AWS::EC2::KeyPair::KeyName", "ConstraintDescription" : "must be the name of an existing EC2 KeyPair." }, "InstanceType" : { "Description" : "WebServer EC2 instance type", "Type" : "String", "Default" : "t2.small", "AllowedValues" : [ "t1.micro", "t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "m3.medium", "m3.large", "m3.xlarge", "m3.2xlarge", "m4.large", "m4.xlarge", "m4.2xlarge", "m4.4xlarge", "m4.10xlarge", "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", "g2.8xlarge", "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." }, ...

例 YAML

Copy
Parameters: ... KeyName: ConstraintDescription: must be the name of an existing EC2 KeyPair. Description: Name of an existing EC2 KeyPair to enable SSH access to the instances Type: AWS::EC2::KeyPair::KeyName InstanceType: AllowedValues: - t1.micro - t2.nano - t2.micro - t2.small - t2.medium - t2.large - m1.small - m1.medium - m1.large - m1.xlarge - m2.xlarge - m2.2xlarge - m2.4xlarge - m3.medium - m3.large - m3.xlarge - m3.2xlarge - m4.large - m4.xlarge - m4.2xlarge - m4.4xlarge - m4.10xlarge - 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 - g2.8xlarge - 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. Default: t2.small Description: WebServer EC2 instance type Type: String ...

WebServer リソース宣言では、次のように、KeyName プロパティが KeyName パラメーターで指定されています。

例 JSON

Copy
"WebServer" : { "Type": "AWS::EC2::Instance", "Properties": { "KeyName" : { "Ref" : "KeyName" }, ... } },

例 YAML

Copy
WebServer: Type: AWS::EC2::Instance Properties: KeyName: Ref: KeyName ...

中括弧には、 KeyName を入力とする Ref 関数への呼び出しが含まれています。Ref 関数は、参照するオブジェクトの値を返します。ここでは、Ref 関数は KeyName プロパティを、スタックの作成時に KeyName に指定された値に設定します。

また、Ref 関数は、リソースのプロパティを別のリソースの値に設定することもできます。たとえば、リソース宣言 WebServer には、以下のプロパティ宣言が含まれています。

例 JSON

Copy
"WebServer" : { "Type": "AWS::EC2::Instance", "Properties": { ... "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ], ... } },

例 YAML

Copy
WebServer: Type: AWS::EC2::Instance Properties: SecurityGroups: - Ref: WebServerSecurityGroup ...

SecurityGroups プロパティは、EC2 セキュリティグループのリストを受け取ります。Ref 関数は入力として WebServerSecurityGroup(テンプレート内のセキュリティグループの論理名) を受け取り、SecurityGroups プロパティに WebServerSecurityGroup の名前を追加します。

テンプレートには、Mappings セクションもあります。マッピングを使用すると、ルックアップテーブルステートメントと同じように評価される条件値を宣言できます。テンプレートはマッピングを使用して、リージョンの適切な Amazon マシンイメージ (AMI) やインスタンスタイプのアーキテクチャタイプを選択します。Outputs は、aws cloudformation describe-stacks コマンドで返されたり、スタック作成後に AWS CloudFormation コンソールの [Outputs] タブで返されたりするカスタム値を定義します。出力値を使用すると、スタック内のリソースの情報 (テンプレートで作成したウェブサイトの URL など) を返すことができます。マッピング、出力や、テンプレートに関するその他のことの詳細については、「テンプレートの基礎についての学習」で説明しています。

ここでは、テンプレートについてはこれで十分です。スタックの作成を始めましょう。

ステップ 2: スタックに必要な項目の準備ができたことの確認

テンプレートからスタックを作成する前に、テンプレートに必要なすべての依存リソースが利用できることを確認する必要があります。テンプレートは、既存の AWS リソースと、テンプレート自体で宣言されているリソースの両方を使用または参照できます。AWS CloudFormation によって、テンプレート内のリソースへの参照が確認され、既存のリソースへの参照についても、スタックを作成するリージョンにリソースが存在していることが確認されます。存在しない依存リソースをテンプレートが参照している場合、スタックの作成は失敗します。

サンプル WordPress テンプレートには、入力パラメーターである KeyName が含まれています。このパラメーターは、テンプレートで宣言された Amazon EC2 インスタンスに使用されるキーペアを指定します。テンプレートからスタックを作成するユーザーは、KeyName パラメーターの有効な Amazon EC2 キーペアを指定する必要があります。有効なキーペア名を指定すると、スタックが正常に作成されます。有効なキーペア名を指定しないと、スタックはロールバックされます。

スタックを作成する前に、有効な Amazon EC2 キーペアがあることを確認し、キーペア名を記録しておきます。

キーペアを表示するには、Amazon EC2 コンソールを開き、ナビゲーションペインで [Key Pairs] をクリックします。

注記

Amazon EC2 キーペアがない場合は、スタックを作成するのと同じリージョンでキーペアを作成する必要があります。キーペアの作成については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「SSH キーペアの取得」を参照してください。

有効なキーペアができたので、WordPress テンプレートを使用してスタックを作成しましょう。

ステップ 3: スタックの作成

前に説明した WordPress-1.0.0 ファイルに基づいてスタックを作成します。テンプレートには、EC2 インスタンスなど、いくつかの AWS リソースが含まれています。

WordPress スタックを作成するには

  1. AWS マネジメントコンソール にサインインした後、AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。

  2. これが新しい AWS CloudFormation アカウントである場合は、[Create New Stack] をクリックします。そうでない場合は、[Create Stack] をクリックします。

  3. [Template] セクションで、[Specify an Amazon S3 Template URL] を選択してサンプルテンプレート WordPress の URL を入力または貼り付けた後、[Next] をクリックします。

    https://s3-us-west-2.amazonaws.com/cloudformation-templates-us-west-2/WordPress_Single_Instance.template

    注記

    S3 バケットに格納されている AWS CloudFormation テンプレートは、スタックを作成するユーザーにアクセスでき、スタックが作成されたリージョンと同じリージョンにある必要があります。したがって、S3 バケットが us-east-2 リージョンにある場合、スタックは us-east-2 で作成される必要があります。

  4. [Specify Details] セクションでは、[Name] フィールドにスタックの名前を入力します。この例では、MyWPTestStack を使用します。スタック名にスペースを含めることはできません。

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

    注記

    [Specify Parameters] ページに、テンプレートの Parameters セクションのパラメーターが表示されます。

  6. [Next] をクリックします。

  7. このシナリオでは、タグは追加しません。[Next] をクリックします。キーと値のペアであるタグは、スタックの識別に役立ちます。詳細については、「AWS CloudFormation スタックへのタグの追加」を参照してください。

  8. スタックの情報を確認します。設定が適切であることを確認したら、[Create ] をクリックします。

スタックの作成には数分かかることがありますが、ただぼんやりと座って待っていたくはないでしょう。その場合は、スタックの作成状況を確認することができます。

ステップ 4: スタックの作成状況の監視

Create Stack ウィザードを完了すると、AWS CloudFormation はテンプレートで指定されているリソースの作成を開始します。新しいスタックである MyWPTestStack が、CloudFormation コンソールの上部のリストに表示されます。そのステータスは、CREATE_IN_PROGRESS である必要があります。スタックの詳細なステータスは、イベントを表示して確認できます。

スタックのイベントを表示するには

  1. AWS CloudFormation コンソールのリストで、スタック MyWPTestStack を選択します。

  2. スタックの詳細ペインで、[Events] タブをクリックします。

    コンソールは自動的に更新され、60 秒ごとに最新のイベントがイベントリストに表示されます。

[Events] タブには、スタックの作成の主要な各ステップが、最新のイベントが一番上になるように時間順に表示されます。

最初のイベント (イベントリストの一番下のイベント) は、スタック作成プロセスの開始です。

2013-04-24 18:54 UTC-7 CREATE_IN_PROGRESS AWS::CloudFormation::Stack MyWPTestStack User initiated

続いて、各リソースの作成の開始と終了を示すイベントが表示されます。たとえば、EC2 インスタンスの作成は、次のようなエントリになります。

2013-04-24 18:59 UTC-7 CREATE_COMPLETE AWS::EC2::Instance...

2013-04-24 18:54 UTC-7 CREATE_IN_PROGRESS AWS::EC2::Instance...

AWS CloudFormation がリソースの作成を開始したことがレポートされると、CREATE_IN_PROGRESS イベントが記録されます。リソースが正常に作成されると、CREATE_COMPLETE イベントが記録されます。

AWS CloudFormation によって正常にスタックが作成されると、[Events] タブの上部に次のイベントが表示されます。

2013-04-24 19:17 UTC-7 CREATE_COMPLETE AWS::CloudFormation::Stack MyWPTestStack

AWS CloudFormation がリソースを作成できない場合は、CREATE_FAILED イベントがレポートされます。また、デフォルトではスタックがロールバックされて、作成されたリソースがある場合はすべて削除されます。[Status Reason] 列には、失敗の原因となった問題が表示されます。

ステップ 5: スタックリソースの使用

スタック MyWPTestStack のステータスが CREATE_COMPLETE になっていれば、スタックの作成は完了しており、リソースを使い始めることができます。

サンプル WordPress スタックは、WordPress ウェブサイトを作成します。WordPress インストールスクリプトを実行すると、WordPress の設定を続けることができます。

WordPress のインストールを完了するには

  1. [Outputs] タブの [WebsiteURL] 行で、[Value] 列のリンクをクリックします。

    WebsiteURL 出力値は、スタックで作成した WordPress ウェブサイトのインストールスクリプトの URL です。

  2. WordPress インストールのウェブページで、WordPress の設定を完了するための画面の手順に従います。WordPress のインストールの詳細については、http://codex.wordpress.org/Installing_WordPress を参照してください。

    インストールとログインが完了するとダッシュボードが表示されるので、ここで WordPress ブログに追加オプションを設定することができます。次に、AWS CloudFormation テンプレートを使用して、正常に作成されたブログへの投稿を開始できます。

ステップ 6: クリーンアップ

AWS CloudFormation の基本的なタスクを完了しました。不要なサービスに対して課金されていないことを確認するために、スタックとそのリソースを削除して、クリーンアップすることができます。

スタックとそのリソースを削除するには

  1. AWS CloudFormation コンソールから、MyWPTestStack スタックを選択します。

  2. [Delete Stack] をクリックします。

  3. 表示される確認メッセージで [Yes, Delete] をクリックします。

MyWPTestStack のステータスが DELETE_IN_PROGRESS に変わります。スタックの作成を監視したのと同じ方法で、[Event] タブを使用して削除を監視できます。AWS CloudFormation によるスタックの削除が完了すると、リストからスタックが削除されます。

おめでとうございます。テンプレートの選択、スタックの作成、リソースの表示と使用、スタックとそのリソースの削除を正常に行うことができました。それだけでなく、AWS CloudFormation テンプレートを使用して WordPress ブログを設定することもできました。その他のテンプレートは、AWS CloudFormation サンプルテンプレートライブラリで見つけることができます。

次は、簡単に既存のテンプレートを変更したり独自のテンプレートを作成したりできるように、「テンプレートの基礎についての学習」でテンプレートについてより詳しく知る必要があります。