

# デプロイされた CloudFormation スタックからエクスポートされた出力を取得する
<a name="using-cfn-stack-exports"></a>

同じ AWS アカウントおよびリージョン内に複数のスタックがあるときは、スタック間での情報の共有が役に立つ場合があります。これは、あるスタックが別のスタックによって作成されたリソースを使用する必要があるときに便利です。

例えば、ウェブサーバーのためにサブネットやセキュリティグループなどのネットワークリソースを作成するスタックがあるとします。情報が共有されていると、実際のウェブサーバーを作成する他のスタックが、最初のスタックによって作成されたネットワークリソースを使用できます。リソースの ID をスタックのテンプレートにハードコード化する、または、ID を入力パラメータとして渡す必要はありません。

スタック間で情報を共有するには、1 つのスタックからの出力値をエクスポートし、それらを別のスタックにインポートします。処理の流れ

1. 最初のスタックのテンプレート (ネットワークスタックなど) で、`Outputs` セクションの `Export` フィールドを使用して、エクスポートする特定の値を定義します。詳細については、「[CloudFormation テンプレートの Outputs 構文](outputs-section-structure.md)」を参照してください。

1. そのスタックを作成または更新すると、CloudFormation が出力値をエクスポートして、同じ AWS アカウントおよびリージョン内にある他のスタックがそれらを利用できるようにします。

1. 他のスタックのテンプレートで [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-importvalue.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-importvalue.html) 関数を使用して、最初のスタックからエクスポートされた値をインポートします。

1. 2 番目のスタック (ウェブサーバースタックなど) を作成または更新すると、CloudFormation が最初のスタックからエクスポートされた値を自動的に取得して、それらを使用します。

チュートリアル、およびサンプルテンプレートについては、[別の CloudFormation スタックのリソース出力を参照する](walkthrough-crossstackref.md) を参照してください。

## スタック出力値のエクスポートとネストされたスタックの使用との比較
<a name="output-vs-nested"></a>

ネストされたスタックとは、別のスタック内で `AWS::CloudFormation::Stack` リソースを使用して作成するスタックです。ネストされたスタックにより、1 つのスタックからすべてのリソースをデプロイし、管理します。ネストされたスタックグループからの出力をグループ内の別のスタックへの入力として使用できます。これは値のエクスポートとは異なります。

情報共有をネストされたスタックグループ内に隔離する場合は、ネストされたスタックを使用することを推奨します。ネストされたスタックのグループ内に限らず、他のスタックと情報を共有するには、値をエクスポートします。たとえば、サブネットのあると 1 つのスタックを作成し、ID をエクスポートできます。他のスタックは、そのサブネットの ID をインポートすることで、そのサブネットを使用できます。各スタックは独自のサブネットを作成する必要はありません。スタックがサブネット ID をインポートする限り、それを変更または削除することはできません。

ネストされたスタックの詳細については、「[ネストされたスタックを使用してテンプレートを再利用可能な部分に分割する](using-cfn-nested-stacks.md)」を参照してください。

## 考慮事項
<a name="using-cfn-stack-exports-considerations"></a>

クロススタック参照には以下の制限があります。
+ AWS アカウント ごとに、`Export` 名がリージョン内で一意である必要があります。
+ リージョン間でクロススタック参照は作成できません。組み込み関数 `Fn::ImportValue` を使用すると、同じリージョン内にエクスポートされた値のみをインポートできます。
+ 出力の場合、`Export` の `Name` プロパティの値は、リソースに依存する `Ref` または `GetAtt` の関数を使用できません。

  同様に、`ImportValue` 関数にリソースに依存する `Ref` または `GetAtt` 関数を含めることはできません。
+ 別のスタックが出力値をインポート後、出力値をエクスポートしているスタックを削除したり、エクスポートされた出力値を変更することはできません。エクスポートしているスタックを削除したり出力値を変更する前に、インポートをすべて削除する必要があります。

## エクスポートされた出力値のリスト
<a name="using-cfn-stack-exports-listing"></a>

スタックからエクスポートされた出力値を表示する必要がある場合は、次のいずれかの方法を使用します。

**エクスポートされた出力値 (コンソール) をリスト表示するには**

1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) で CloudFormation コンソール を開きます。

1. 画面上部にあるナビゲーションバーで、AWS リージョン を選択します。

1. 左側のナビゲーションペインで、**[エクスポート]** を選択します。

**エクスポートされた出力値 (AWS CLI) をリスト表示するには**  
次の [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-exports.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-exports.html) コマンドを使用します。*us-east-1* を、ご利用の AWS リージョン に置き換えてください。

```
aws cloudformation list-exports --region us-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` 関数を使用してその値を参照できます。

## エクスポートされた出力値をインポートするスタックのリスト
<a name="using-cfn-stack-imports"></a>

エクスポートされた出力値を削除または変更するには、まずどのスタックがそれらをインポートしようとしているのかを確認する必要があります。

エクスポートされた出力値をインポートするスタックを表示するには、次のいずれかの方法を使用します。

**エクスポートされた出力値をインポートするスタックをリストするには (コンソール)**

1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) で CloudFormation コンソール を開きます。

1. 左側のナビゲーションペインで、**[エクスポート]** を選択します。

1. 特定のエクスポート値をインポートするスタックを確認するには、そのエクスポート値の **[Export Name]** (エクスポート名) を選択します。CloudFormation により、エクスポートの詳細ページが表示され、値をインポートしているすべてのスタックがリスト表示されます。

**エクスポートされた出力値をインポートするスタックをリストするには (AWS CLI)**  
[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-imports.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-imports.html) コマンドを使用します。*us-east-1* を AWS リージョン に、`private-vpc-vpcid` をエクスポートされた出力値の名前に置き換えます。

```
aws cloudformation list-imports --region us-east-1 \
    --export-name private-vpc-vpcid
```

CloudFormation から、値をインポートするスタックのリストが返されます。

```
{
    "Imports": [
        "my-app-stack"
    ]
}
```

エクスポートされた特定の値をインポートするスタックがわかったら、それらのスタックを変更して、出力値を参照する `Fn::ImportValue` 関数を削除する必要があります。エクスポートされた出力値を削除または編集する前に、エクスポートされた出力値を参照するインポートをすべて削除する必要があります。