AWS re:Postを使用することにより、以下に同意したことになります 利用規約

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

所要時間2分
0

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

簡単な説明

次の解決方法で、クロススタックリファレンスを作成する方法の例を示します。その他の手順については、「チュートリアル: 別の AWS CloudFormation スタックのリソース出力を参照する」をご覧ください。

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

解決方法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


関連情報

AWS Systems Manager Parameter Store のパラメータを使用して、CloudFormation スタック間で値を共有する方法を教えてください。

AWS CloudFormation テンプレート

AWS::EC2::Instance

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