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