CloudFormation テンプレートから別のスタックのリソースを参照するにはどうすればよいですか?

所要時間2分
0

AWS CloudFormation でテンプレートを作成する際に、別の AWS CloudFormation スタック内のリソースを参照したいと考えています。

解決手順

別の CloudFormation スタック内のリソースを参照するには、まずクロススタック参照を作成する必要があります。以下の解決手順は、クロススタック参照を作成する方法の一例を示しています。この NetworkStack スタックの例では、${AWS::StackName}-SecurityGroupID${AWS::StackName}-SubnetID ネットワーク関連リソースを作成してエクスポートしています。スタックを作成すると、CloudFormation が ${AWS::StackName}NetworkStack に置き換えます。最終的なエクスポート名は NetworkStack-SecurityGroupIDNetworkStack-SubnetID になります。

出力値をエクスポートするスタックを作成する

次の手順を実行します。

  1. CloudFormation スタックを作成し、SampleNetworkCrossStack テンプレートを使用します。
    注: テンプレートの Outputs セクションExport フィールドを宣言する必要があります。
  2. スタックに NetworkStack という名前を付けます。
    注: NetworkStack はサブネットとセキュリティグループの値をエクスポートします。

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

SubetIdAmazon Elastic Compute Cloud (Amazon EC2) インスタンスのプロパティ (SecurityGroupId など) は、エクスポートを行うスタックの値を使用します。値をインポートするには、Fn::ImportValue 組み込み関数を使用します。

注: インポートを行うスタックと、エクスポートを行うスタックは、同じ AWS リージョンおよび AWS アカウントで管理する必要があります。また、エクスポートされる値の名前は、お使いのリージョンとアカウントで一意である必要があります。

EC2 インスタンスを作成するには、次の手順を実行します。

  1. CloudFormation コンソールを開きます。
  2. [スタックの作成] を選択し、[テンプレートのデザイン] を選択します。
  3. コードエディタの [パラメータ] タブを選択し、[テンプレート] を選択します。
  4. エクスポートを行うスタックの値を使用してインスタンスを作成するには、コードエディタに次のテンプレートを入力します。
    重要: NetworkStack リソーススタックを NetworkStackParameter の値として設定します。値 NetworkStack は、対応する Fn::ImportValue 関数の当該のスタック名に取って代わります。
    {  "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"
                  }
                }
              }
            ]
          }
        }
      }
    }
    注: t2.micro をお使いのインスタンスタイプに、ami-a1b23456 を Amazon マシンイメージ (AMI) ID に置き換えてください。
  5. [スタックの作成] (上矢印の付いたクラウドアイコン) を選択し、[次へ] を選択します。
  6. [スタック名] にスタックの名前を入力します。
  7. [パラメータ] には、クロス参照するネットワークスタック名 (例: NetworkStack) を入力します。
  8. [次へ] を選択し、もう一度 [次へ] を選択します。
  9. [作成] を選択します。
  10. スタックのステータスが CREATE_COMPLETE に変わったら、Amazon EC2 コンソールを開きます。
  11. ナビゲーションペインで [インスタンス] を選択し、次いで、作成したインスタンスを選択します。
  12. [説明] タブを選択し、セキュリティグループとサブネットが設定されていることを確認します。

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

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

**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

関連情報

AWS Systems Manager Parameter Store のパラメータを使用して CloudFormation スタック間で値を共有するにはどうすればよいですか?

AWS CloudFormation テンプレート

AWS::EC2::Instance

別の CloudFormation スタックのリソース出力を参照する

AWS公式
AWS公式更新しました 5ヶ月前
コメントはありません

関連するコンテンツ