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

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

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

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

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

前提条件

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

注記

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

クロススタック参照には以下の制限があります。

  • AWS アカウントごとに、Export 名前がリージョン内で一意である必要があります。

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

  • 出力の場合、ExportName プロパティの値は、リソースに依存する Ref または GetAtt の関数を使用できません。

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

  • 別のスタックがその出力の 1 つを参照している場合、スタックを削除することはできません。

  • 別のスタックによって参照されている出力値を変更または削除することはできません。

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

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

注記

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

ネットワークスタックを作成するには
  1. AWS CloudFormation コンソールを開き、[スタックの作成] を選択します。

  2. [Template is ready (テンプレートの準備ができています)] を選択し、[Specify template (テンプレートの指定)] セクションで [Amazon S3 URL] を選択します。次の URL をコピーしてテキストボックスに貼り付けます。https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleNetworkCrossStack.template

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

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

  4. [スタックの名前] に SampleNetworkCrossStack を入力し、[次へ] を選択します。

    注記

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

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

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

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

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

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

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

注記

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

ウェブアプリケーションスタックを作成するには
  1. AWS CloudFormation コンソールを開き、[スタックの作成] を選択します。

  2. [Template is ready (テンプレートの準備ができています)] を選択し、[Specify template (テンプレートの指定)] セクションで [Amazon S3 URL] を選択します。「https://s3.amazonaws.com/cloudformation-examples/user-guide/cross-stack/SampleWebAppCrossStack.template」という URL をコピーしてテキストボックスに貼り付けます。

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

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

  4. [スタックの名前] に SampleWebAppCrossStack を入力します。[パラメータ] セクションで、[NetworkStackName] パラメータのデフォルト値を使用し、[次へ] を選択します。

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

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

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

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

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

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

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

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

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

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

  2. [アクション] を選択してから、[スタックの削除] を選択します。

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

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

    注記

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

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

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