AWS CloudFormation テンプレートの別のスタック内のリソースを参照する方法を教えてください。

最終更新日: 2019 年 7 月 23 日

テンプレートを作成するときに、別の AWS CloudFormation スタックのリソースを参照する方法を教えてください。

簡単な説明

次の解決策は、クロススタック参照を作成する方法の例を示しています。追加の説明については、「チュートリアル: 別の AWS CloudFormation スタックのリソース出力を参照する」を参照してください。

注: 別の AWS CloudFormation スタック内のリソースを参照するには、クロススタック参照を作成する必要があります。クロススタック参照を作成するには、エクスポートフィールドを使用してリソース出力の値にエクスポート用のフラグを立てます。次に、Fn::ImportValue 組み込み関数を使用して、同じリージョンおよびアカウント内の任意のスタックに値をインポートします。エクスポートされた値は、テンプレートで指定された名前によって識別されます。これらの名前はお客様のリージョンやアカウントに固有のものでなければなりません。

解決方法

次の手順は、NetworkStack という名前の AWS CloudFormation スタックを作成する方法を示しています。このスタックは、ネットワーク関連のリソースを作成し、${AWS::StackName}-SecurityGroupID${AWS::StackName}-SubnetID という名前のエクスポートを行います。スタック作成後、${AWS::StackName}NetworkStack に置き換えられます。最終エクスポート名は NetworkStack-SecurityGroupIDNetworkStack-SubnetID です。

出力値をエクスポートするためのスタックを作成します

1.    この テンプレートを使用して AWS CloudFormation スタックを作成します。

2.    スタックに NetworkStack という名前を付けます。

注: NetworkStack は、サブネットとセキュリティグループの値をエクスポートします。

インポートされたサブネットとセキュリティグループを使用して EC2 インスタンスを作成する

1.    [AWS CloudFormation コンソール] を開きます。

2.    [スタックの作成] を選択してから、[デザインテンプレート] クリックします。

3.    コードエディタの [パラメータ] タブで、[テンプレート] を選択します。

4.    次のテンプレートをコピーしてコードエディタに貼り付け、InstanceTypeImageId の適切な値でテンプレートを更新します。

{
  "Parameters": {
    "NetworkStackParameter": {
      "Type": "String"
    }
  },
  "Resources": {
    "WebServerInstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "InstanceType": "t2.micro",
        "ImageId": "ami-a1b23456",
        "NetworkInterfaces": [
          {
            "GroupSet": [
              {
                "Fn::ImportValue": {
                  "Fn::Sub": "${NetworkStackParameter}-SecurityGroupID"
                }
              }
            ],
            "AssociatePublicIpAddress": "true",
            "DeviceIndex": "0",
            "DeleteOnTermination": "true",
            "SubnetId": {
              "Fn::ImportValue": {
                "Fn::Sub": "${NetworkStackParameter}-SubnetID"
              }
            }
          }
        ]
      }
    }
  }
}

重要: 手順 4 のテンプレートで、NetworkStackParameter の値として NetworkStack リソーススタックを使用してください。NetworkStack の値は、対応する Fn::ImportValue 関数の正しいスタック名を置き換えます。

注: インポートおよびエクスポートのテンプレートの例については、Fn::ImportValue を参照してください。

5.    [スタックの作成] アイコンを選択してから、[次へ] を選択します。

6.    [スタック名] には、スタックの名前を入力します。

7.    [パラメータ] には、相互参照するネットワークスタック名 (NetworkStack) を入力します。

8.    [次へ] を選択し、もう一度 [次へ] を選択してから、[作成] をクリックします。

9.    スタックの作成が完了したら、[Amazon EC2 コンソール] を開きます。

10.    ナビゲーションペインで、[インスタンス] を選択し、手順 4 でテンプレートを使用して作成したインスタンスを選択します。

11.    [説明] ビューを選択し、セキュリティグループとサブネットが設定されていることを確認します。

重要: 別のスタックがこれらの値をインポートしている間は、ソーススタックまたはソーススタックのエクスポート値を削除できません。ソーススタックのエクスポート値を更新するには、ソーススタックのエクスポート値をインポートしているスタック内の実際の値を手動で置き換えます。その後、ソーススタックのエクスポート値を更新できます。

エクスポートされた出力値をインポートしているすべてのスタックをリストするには、list-imports コマンドを実行します。AWS リージョン内のすべてのエクスポートを一覧表示するには、AWS CloudFormation コンソールを使用するか、list-exports コマンドを実行します。エクスポート名は、AWS リージョンごとのアカウントに対して一意である必要があります。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合