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

所要時間2分
0

別の AWS CloudFormation スタックで使用されているエクスポート変数を更新しようとすると、エラーメッセージが表示されます。表示されるエラーは 「エクスポート変数は別のスタックで使用されているため、更新できません。」です。

簡単な説明

このエラーを解決するには、AWS Systems Manager Parameter StoreSSM パラメータを使用して CloudFormation スタック間で値を共有します。SSM パラメータは、あるスタック (stackA) に値を格納し、別のスタック (stackB) でその値を使用できるようにするパラメータです。

SSM パラメータを使用する場合、2 つの CloudFormation スタックの間に依存関係はありません。これは、AWS Systems Manager Parameter Store が変数を保存するためです。

注: CloudFormation はいくつかの SSM パラメータタイプをサポートしています。

解決策

1.    以下のテンプレートを参照して CloudFormation スタック (stackA) を作成します。

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "AvailabilityZone": {
      "Description": "Amazon EC2 instance Availability Zone",
      "Type": "String"
    },
    "AMIId": {
      "Description": "The Amazon Machine Image id",
      "Type": "String"
    },
    "InstanceType": {
      "Description": "The Type of instance",
      "Type": "String"
    }
  },
  "Resources": {
    "myinstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "AvailabilityZone": {
          "Fn::GetAtt": ["BasicParameter", "Value"]
        },
        "ImageId": {
          "Ref": "AMIId"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        }
      }
    },
    "BasicParameter": {
      "Type": "AWS::SSM::Parameter",
      "Properties": {
        "Name": "AvailabilityZone",
        "Type": "String",
        "Value": {
          "Ref": "AvailabilityZone"
        }
      }
    }
  }
}

上記のテンプレートは、インスタンスと SSM パラメータを作成します。SSM パラメータの値は、作成されたインスタンスのアベイラビリティーゾーンに設定されます。stackA は、[名前] を [AvailabilityZone]、[] を [us-east-2a] に設定して SSM Parameter Store を作成します。

注: SSM パラメータには一意の名前を使用する必要があります。

2.    次のテンプレートを参照して別の CloudFormation スタック (stackB) を作成します。

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "AMIId": {
      "Description": "The Amazon Machine Image id",
      "Type": "String"
    },
    "InstanceType": {
      "Description": "The Type of instance",
      "Type": "String"
    },
    "AvailabilityZone": {
      "Description": "Amazon EC2 instance Availablity Zone",
      "Type": "AWS::SSM::Parameter::Value<String>",
      "Default": "AvailabilityZone"
    }
  },
  "Mappings": {},
  "Conditions": {},
  "Resources": {
    "myinstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "AvailabilityZone": {
          "Ref": "AvailabilityZone"
        },
        "ImageId": {
          "Ref": "AMIId"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        }
      }
    }
  }
}

このテンプレートは、stackA がステップ 1 で作成した SSM パラメータを使用します。

注: このパラメータを使用するには、stackB でパラメータを宣言する必要があります。タイプAWS::SSM::Parameter::Value<String> に設定します。stackB から作成されたインスタンスは us-east-2a アベイラビリティーゾーンで起動されます。

3.    stackA を更新するには、AvailabilityZone パラメータを us-east-2a から us-east-2b に変更します。

4.    stackB と同じ更新されたアベイラビリティーゾーンにある stackA からインスタンスを起動します。インスタンスは置き換えられ、us-east-2b アベイラビリティーゾーンで起動されます。

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

関連するコンテンツ