別の CloudFormation スタックのリソース出力を参照する
このチュートリアルでは、ある CloudFormation スタックの出力を別のスタック内で参照して、モジュール性と再利用性を高めたテンプレートを作成する方法について説明します。
1 つのスタックにすべてのリソースを含めるのではなく、必要な AWS リソースをいくつかのスタックに分けて作成します。その後、他のスタックから必要なリソース出力を参照できます。クロススタックの参照を出力に制限することにより、他のスタックから参照されるスタックの部分を制御します。
たとえば、VPC のあるネットワークスタック、セキュリティグループ、パブリックウェブアプリケーションのサブネット、別個のパブリックウェブアプリケーションスタックがあるとします。ウェブアプリケーションで、ネットワークスタックのセキュリティグループとサブネットが使用されるようにするには、ウェブアプリケーションスタックがネットワークからのリソース出力を参照できるようにクロススタック参照を作成する必要があります。クロススタック参照を使用すると、ウェブアプリケーションスタックの所有者がネットワーキングのルールや資産を作成または維持する必要がなくなります。
クロススタックの参照を作成するには、Export
出力フィールドを使用してエクスポートのリソース出力の値を設定します。次に、値をFn::ImportValue
組み込み関数を使用して値をインポートします。詳細については、「デプロイされた CloudFormation スタックからエクスポートされた出力を取得する」を参照してください。
注記
CloudFormation は無料サービスです。ただし、スタックに追加する AWS リソースにはそれぞれ現在の料金が課金されます。AWS の料金の詳細については、各製品の詳細ページ
ステップ 1: サンプルテンプレートを使用してネットワークスタックを作成する
このチュートリアルを開始する前に、IAM アクセス権限があり、Amazon VPC、Amazon EC2、CloudFormation のいずれのサービスも使用できることを確認してください。
ネットワークスタックは、ウェブアプリケーションスタックで使用する VPC、セキュリティグループ、サブネットで構成されます。これらのリソースに加えて、パブリックアクセスを可能にするインターネットゲートウェイとルーティングテーブルも、ネットワークスタックによって作成されます。
ウェブアプリケーションスタックの作成前に、このスタックを作成する必要があります。先にウェブアプリケーションスタックを作成した場合は、使用できるセキュリティグループやサブネットがない状態になります。
スタックテンプレートは、次の URL から入手できます: https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.templateOutputs
セクションでは、サンプルのテンプレートがエクスポートするネットワーキングリソースを表示できます。他のスタックからネットワーキングリソースをエクスポートした場合、エクスポートされたリソース名には、スタック名がプレフィックスとして付けられます。ユーザーがネットワーキングリソースをインポートするときは、リソースをどのスタックからインポートするかを指定できます。
ネットワークスタックを作成するには
-
CloudFormation コンソール
を開き、[スタックを作成] を選択します。 -
[Template is ready (テンプレートの準備ができています)] を選択し、[Specify template (テンプレートの指定)] セクションで [Amazon S3 URL] を選択します。
-
次の URL をコピーしてテキストボックスに貼り付けます:
https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template
。 -
[Next] を選択します。
-
[スタックの名前] に
SampleNetworkCrossStack
を入力し、[次へ] を選択します。注記
このスタックの名前をメモしておきます。ウェブアプリケーションスタックを起動するときにこのスタック名が必要になります。
-
[Next] を選択します。このチュートリアルでは、タグの追加も詳細設定の指定も不要です。
-
スタック名とテンプレート URL が正しいことを確認し、[スタックの作成] を選択します。
CloudFormation によってスタックが作成されるまでに数分かかることもあります。ウェブアプリケーションスタックの作成に進む前に、すべてのリソースが正しく作成されるまで待ちます。
-
進捗状況を監視するには、スタックイベントを確認します。詳細については、「スタックの進行状況を監視する」を参照してください。
ステップ 2: サンプルテンプレートを使用してウェブアプリケーションスタックを作成する
ウェブアプリケーションスタックによって、ネットワークスタックのセキュリティグループとサブネットを使用する EC2 インスタンスが作成されます。
このスタックは、ネットワークスタックと同じ AWS リージョン に作成する必要があります。
スタックテンプレートは、次の URL から入手できます: https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.templateResources
セクションで、EC2 インスタンスのプロパティを参照してください。Fn::ImportValue
関数を使用することで、別のスタックからどのようにネットワーキングリソースがインポートされたかを確認できます。
ウェブアプリケーションスタックを作成するには
-
CloudFormation コンソール
を開き、[スタックを作成] を選択します。 -
[Template is ready (テンプレートの準備ができています)] を選択し、[Specify template (テンプレートの指定)] セクションで [Amazon S3 URL] を選択します。
-
次の URL をコピーしてテキストボックスに貼り付けます:
https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template
。 -
[Next] を選択します。
-
[スタックの名前] に
SampleWebAppCrossStack
を入力します。[パラメータ] セクションで、[NetworkStackName] パラメータのデフォルト値を使用し、[次へ] を選択します。サンプルテンプレートでは、パラメータ値を使用してどのスタックから値をインポートするかを指定しています。
-
[Next] を選択します。このチュートリアルでは、タグの追加も詳細設定の指定も不要です。
-
スタック名とテンプレート URL が正しいことを確認し、[スタックの作成] を選択します。
CloudFormation によってスタックが作成されるまでに数分かかることもあります。
ステップ 3: スタックが設計どおりに機能することを検証する
スタックの作成後、そのリソースを表示し、インスタンス ID をメモしておきます。スタックリソースの表示の詳細については、「CloudFormation コンソールからスタック情報を表示する」を参照してください。
インスタンスのセキュリティグループとサブネットを確認するには、Amazon EC2 コンソールSampleNetworkCrossStack
スタックからセキュリティグループとサブネットを使用しているなら、クロススタックの参照が正常に作成されています。
コンソールを使用してスタック出力と例のウェブサイト URL を表示し、てウェブアプリケーションが実行中であることを確認します。詳細については、「CloudFormation コンソールからスタック情報を表示する」を参照してください。
ステップ 4: リソースをクリーンアップする
不要なサービスに対して課金されないように、スタックを削除します。
スタックを削除するには
-
CloudFormation コンソールで、
SampleWebAppCrossStack
スタックを選択します。 -
[アクション] を選択してから、[スタックの削除] を選択します。
-
確認メッセージで、[削除] を選択します。
-
このスタックの削除後、
SampleNetworkCrossStack
スタックに対して同じ手順を繰り返します。注記
CloudFormation によって
SampleWebAppCrossStack
スタックが完全に削除されるまで待ちます。EC2 インスタンスが VPC でまだ実行中であれば、CloudFormation はSampleNetworkCrossStack
スタックの VPC を削除しません。