デプロイされた CloudFormation スタックからエクスポートされた出力を取得する
同じ AWS アカウントおよびリージョン内に複数のスタックがあるときは、スタック間での情報の共有が役に立つ場合があります。これは、あるスタックが別のスタックによって作成されたリソースを使用する必要があるときに便利です。
例えば、ウェブサーバーのためにサブネットやセキュリティグループなどのネットワークリソースを作成するスタックがあるとします。情報が共有されていると、実際のウェブサーバーを作成する他のスタックが、最初のスタックによって作成されたネットワークリソースを使用できます。リソースの ID をスタックのテンプレートにハードコード化する、または、ID を入力パラメータとして渡す必要はありません。
スタック間で情報を共有するには、1 つのスタックからの出力値をエクスポートし、それらを別のスタックにインポートします。処理の流れ
- 
      最初のスタックのテンプレート (ネットワークスタックなど) で、 OutputsセクションのExportフィールドを使用して、エクスポートする特定の値を定義します。詳細については、「CloudFormation テンプレートの Outputs 構文」を参照してください。
- 
      そのスタックを作成または更新すると、CloudFormation が出力値をエクスポートして、同じ AWS アカウントおよびリージョン内にある他のスタックがそれらを利用できるようにします。 
- 
      他のスタックのテンプレートで Fn::ImportValue 関数を使用して、最初のスタックからエクスポートされた値をインポートします。 
- 
      2 番目のスタック (ウェブサーバースタックなど) を作成または更新すると、CloudFormation が最初のスタックからエクスポートされた値を自動的に取得して、それらを使用します。 
チュートリアル、およびサンプルテンプレートについては、別の CloudFormation スタックのリソース出力を参照する を参照してください。
スタック出力値のエクスポートとネストされたスタックの使用との比較
ネストされたスタックとは、別のスタック内で AWS::CloudFormation::Stack リソースを使用して作成するスタックです。ネストされたスタックにより、1 つのスタックからすべてのリソースをデプロイし、管理します。ネストされたスタックグループからの出力をグループ内の別のスタックへの入力として使用できます。これは値のエクスポートとは異なります。
情報共有をネストされたスタックグループ内に隔離する場合は、ネストされたスタックを使用することを推奨します。ネストされたスタックのグループ内に限らず、他のスタックと情報を共有するには、値をエクスポートします。たとえば、サブネットのあると 1 つのスタックを作成し、ID をエクスポートできます。他のスタックは、そのサブネットの ID をインポートすることで、そのサブネットを使用できます。各スタックは独自のサブネットを作成する必要はありません。スタックがサブネット ID をインポートする限り、それを変更または削除することはできません。
ネストされたスタックの詳細については、「ネストされたスタックを使用してテンプレートを再利用可能な部分に分割する」を参照してください。
考慮事項
クロススタック参照には以下の制限があります。
- 
        AWS アカウント ごとに、 Export名がリージョン内で一意である必要があります。
- 
        リージョン間でクロススタック参照は作成できません。組み込み関数 Fn::ImportValueを使用すると、同じリージョン内にエクスポートされた値のみをインポートできます。
- 
        出力の場合、 ExportのNameプロパティの値は、リソースに依存するRefまたはGetAttの関数を使用できません。同様に、 ImportValue関数にリソースに依存するRefまたはGetAtt関数を含めることはできません。
- 
        別のスタックが出力値をインポート後、出力値をエクスポートしているスタックを削除したり、エクスポートされた出力値を変更することはできません。エクスポートしているスタックを削除したり出力値を変更する前に、インポートをすべて削除する必要があります。 
エクスポートされた出力値のリスト
スタックからエクスポートされた出力値を表示する必要がある場合は、次のいずれかの方法を使用します。
エクスポートされた出力値 (コンソール) をリスト表示するには
-  https://console.aws.amazon.com/cloudformation で AWS CloudFormation コンソール を開きます。 
- 
        画面上部にあるナビゲーションバーで、AWS リージョン を選択します。 
- 
        左側のナビゲーションペインで、[エクスポート] を選択します。 
エクスポートされた出力値 (AWS CLI) をリスト表示するには
次の list-exports コマンドを使用します。us-east-1 を、ご利用の AWS リージョン に置き換えてください。
aws cloudformation list-exports --regionus-east-1
以下は出力例です。
{
    "Exports": [
        {
            "ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
            "Name": "private-vpc-subnet-a",
            "Value": "subnet-07b410xmplddcfa03"
        },
        {
            "ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
            "Name": "private-vpc-subnet-b",
            "Value": "subnet-075ed3xmplebd2fb1"
        },
        {
            "ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
            "Name": "private-vpc-vpcid",
            "Value": "vpc-011d7xmpl100e9841"
        }
    ]
}CloudFormation は、現在のリージョンのエクスポートされた出力の名前と値、およびエクスポート元のスタックを表示します。エクスポートされた出力値を別のスタックのテンプレートで使用するために、エクスポート名と Fn::ImportValue 関数を使用してその値を参照できます。
エクスポートされた出力値をインポートするスタックのリスト
エクスポートされた出力値を削除または変更するには、まずどのスタックがそれらをインポートしようとしているのかを確認する必要があります。
エクスポートされた出力値をインポートするスタックを表示するには、次のいずれかの方法を使用します。
エクスポートされた出力値をインポートするスタックをリストするには (コンソール)
-  https://console.aws.amazon.com/cloudformation で AWS CloudFormation コンソール を開きます。 
- 
      左側のナビゲーションペインで、[エクスポート] を選択します。 
- 
      特定のエクスポート値をインポートするスタックを確認するには、そのエクスポート値の [Export Name] (エクスポート名) を選択します。CloudFormation により、エクスポートの詳細ページが表示され、値をインポートしているすべてのスタックがリスト表示されます。 
エクスポートされた出力値をインポートするスタックをリストするには (AWS CLI)
list-imports コマンドを使用します。us-east-1 を AWS リージョン に、private-vpc-vpcid
aws cloudformation list-imports --regionus-east-1\ --export-nameprivate-vpc-vpcid
CloudFormation から、値をインポートするスタックのリストが返されます。
{
    "Imports": [
        "my-app-stack"
    ]
}エクスポートされた特定の値をインポートするスタックがわかったら、それらのスタックを変更して、出力値を参照する Fn::ImportValue 関数を削除する必要があります。エクスポートされた出力値を削除または編集する前に、エクスポートされた出力値を参照するインポートをすべて削除する必要があります。