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

チュートリアル: 別の AWS CloudFormation スタックのリソース出力を参照する

ある AWS CloudFormation スタックから別のスタックへリソースをエクスポートするには、クロススタックの参照を作成します。クロススタックの参照により、多層またはサービス指向アーキテクチャを使用することができます。1 つのスタックにすべてのリソースを含める代わりに、別のスタックに関連した AWS リソースを作成し、必要なリソース出力を他のスタックから参照できます。クロススタックの参照を出力に制限することにより、他のスタックから参照されるスタックの部分を制御します。

たとえば、VPC のあるネットワークスタック、セキュリティグループ、パブリックウェブアプリケーションのサブネット、別個のパブリックウェブアプリケーションスタックがあるとします。ウェブアプリケーションで、ネットワークスタックのセキュリティグループとサブネットが使用されるようにするには、ウェブアプリケーションスタックがネットワークからのリソース出力を参照できるようにクロススタック参照を作成する必要があります。クロススタック参照を使用すると、ウェブアプリケーションスタックの所有者がネットワーキングのルールや資産を作成または維持する必要がなくなります。

クロススタックの参照を作成するには、Export 出力フィールドを使用してエクスポートのリソース出力の値を設定します。次に、値をFn::ImportValue 組み込み関数を使用して値をインポートします。詳細については、「出力」および「Fn::ImportValue」を参照してください。

前提条件

このチュートリアルを開始する前に、AWS Identity and Access Management (IAM) アクセス権限を確認し、以下のすべてのサービスを使用できることを確認してください。Amazon VPC、Amazon EC2、および AWS CloudFormation

注記

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

次の制限はクロス スタックの参照に適用されます:

  • 各 AWS アカウントの場合Export、名前はリージョン内で一意である必要があります。

  • リージョンにわたるクロス スタックの参照を作成することはできません。同じリージョンFn::ImportValue内では、エクスポートされた値のみインポートするのに組み込み関数を使用できます。

  • 出力では、Name プロパティ (Export に属す) の値で、リソースに依存する Ref または GetAtt 関数を使うことはできません。

    同様に、ImportValue 関数に、リソースに依存する Ref または GetAtt 関数を含むことはできません。

  • 他のスタックから参照されている出力が存在する場合は、スタックを削除することはできません。

  • 別のスタックで参照した出力値を変更したり削除することはできません。

ステップ 1: サンプルテンプレートを使用してネットワークスタックを作成する

ネットワークスタックは、ウェブアプリケーションスタックで使用する VPC、セキュリティグループ、サブネットで構成されます。これらのリソースに加えて、パブリックアクセスを可能にするインターネットゲートウェイとルーティングテーブルも、ネットワークスタックによって作成されます。

注記

ウェブアプリケーションスタックの作成前に、このスタックを作成する必要があります。先にウェブアプリケーションスタックを作成した場合は、使用できるセキュリティグループやサブネットがない状態になります。

ネットワークスタックを作成するには

  1. AWS CloudFormation コンソールを開き、[Create Stack] を選択します。

  2. [Select Template] セクションで [Upload a template to Amazon S3] を選択し、[Amazon S3 テンプレートの URL を指定する] を選択します。次に、以下の URL をコピーしてテキストボックスに貼り付けます。https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template

    これは、ネットワークスタックテンプレートへのリンクです。スタックによって作成されるリソースを表示するには、リンクを選択します。これにより、テンプレートが開きます。出力セクションでは、サンプルのテンプレートが出力するネットワーキングリソースを表示できます。他のスタックからネットワーキングリソースをエクスポートした場合、エクスポートされたリソース名には、スタック名がプレフィックスとして付けられます。ユーザーがネットワーキングリソースをインポートするときは、リソースをどのスタックからインポートするかを指定できます。

  3. テンプレートを確認したら、[Next] を選択します。

  4. [Stack name] に SampleNetworkCrossStack と入力し、[Next] を選択します。

    注記

    このスタックの名前をメモしておきます。ウェブアプリケーションスタックを起動するときにこのスタック名が必要になります。

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

  6. スタック名とテンプレート URL が正しいことを確認し、[Create] を選択します。

    AWS CloudFormation によってスタックが作成されるまでに数分かかることもあります。ウェブアプリケーションスタックの作成に進む前に、すべてのリソースが正しく作成されるまで待ちます。

  7. 進捗状況を監視するには、スタックイベントを確認します。詳細については、「スタックのデータとリソースの表示」を参照してください。

ステップ 2: サンプルテンプレートを使用してウェブアプリケーションスタックを作成する

ウェブアプリケーションスタックによって、ネットワークスタックのセキュリティグループとサブネットを使用する EC2 インスタンスが作成されます。

注記

このスタックは、ネットワークスタックと同じリージョンに作成する必要があります。

ウェブアプリケーションスタックを作成するには

  1. AWS CloudFormation コンソールを開き、[Create Stack] を選択します。

  2. [Select Template] セクションで、[Specify an Amazon S3 template URL] を選択し、「https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template」という URL をコピーしてテキストボックスに貼り付けます。

    このリンクの先はウェブアプリケーションテンプレートです。スタックによって作成されるリソースを表示するには、リンクを選択します。これにより、テンプレートが開きます。リソースセクションで、EC2 インスタンスのプロパティを参照してください。Fn::ImportValue 関数を使用することで、別のスタックからどのようにネットワーキングリソースがインポートされたかを確認できます。

  3. テンプレートを確認したら、[Next] を選択します。

  4. [Stack name] に SampleWebAppCrossStack を入力します。[Parameters] セクションで、[NetworkStackName] パラメーターのデフォルト値を使用し、[Next] を選択します。

    サンプルテンプレートでは、パラメーター値を使用してどのスタックから値をインポートするかを指定しています。

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

  6. スタック名とテンプレート URL が正しいことを確認し、[Create] を選択します。

    AWS CloudFormation によってスタックが作成されるまでに数分かかることもあります。

  7. スタックの作成後、そのリソースを表示し、インスタンス ID をメモしておきます。スタックリソースの表示の詳細については、「スタックのデータとリソースの表示」を参照してください。

    インスタンスのセキュリティグループとサブネットを確認するには、Amazon EC2 コンソールでインスタンスのプロパティを確認します。インスタンスが SampleNetworkCrossStack スタックからセキュリティグループとサブネットを使用しているなら、クロススタックの参照が正常に作成されています。

    コンソールを使用してスタック出力と例のウェブサイト URL を表示し、てウェブアプリケーションが実行中であることを確認します。詳細については、「スタックのデータとリソースの表示」を参照してください。

ステップ 3: リソースをクリーンアップする

不要なサービスに対して課金されないように、スタックを削除します。

スタックを削除するには

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

  2. [Actions] を選択してから、[Delete Stack] を選択します。

  3. 確認メッセージで、[Yes, Delete] を選択します。

  4. このスタックの削除後、SampleNetworkCrossStack スタックに対して同じ手順を繰り返します。

    注記

    AWS CloudFormation によって SampleWebAppCrossStack スタックが完全に削除されるまで待ちます。EC2 インスタンスが VPC でまだ実行中であれば、AWS CloudFormation は SampleNetworkCrossStack スタックの VPC を削除しません。

    以前に作成したリソースはすべて削除されます。

このチュートリアルのサンプルテンプレートを使用して、独自のクロス参照のスタックを作成します。