表題に関して、そもそもCloudFormationのテンプレートの記述方法に繰り返し相応のものが利用できないため、何かしら工夫が必要になります。
その工夫の一つにAutoScalingの利用が考えられます。
下記が、そのテンプレート例です。
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "SUZ-LAB Auto Scaling Sample",
"Mappings": {
"AzMap": {
"ap-northeast-1": {
"Az1": "ap-northeast-1a",
"Az2": "ap-northeast-1b"
}
}
},
"Parameters": {
"ImageId": {
"Default" : "ami-b39e0bb2",
"Description": "Image ID",
"Type" : "String"
},
"InstanceType": {
"Default" : "t1.micro",
"Description": "Instance Type",
"Type" : "String"
},
"KeyName": {
"Default" : "suz-lab_ap-northeast-1",
"Description": "Key Name",
"Type" : "String"
},
"Name": {
"Default" : "as-sample",
"Description": "Name",
"Type" : "String"
},
"SecurityGroups": {
"Default" : "default",
"Description": "Security Groups",
"Type" : "CommaDelimitedList"
},
"CapacitySize": {
"Default" : "2",
"Description": "Capacity Size",
"Type" : "String"
}
},
"Resources": {
"AutoScalingLaunchConfig" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"Properties" : {
"KeyName" : { "Ref" : "KeyName" },
"ImageId" : { "Ref" : "ImageId" },
"SecurityGroups" : { "Ref" : "SecurityGroups" },
"InstanceType" : { "Ref" : "InstanceType" }
}
},
"AutoScalingAutoScalingGroup" : {
"Type" : "AWS::AutoScaling::AutoScalingGroup",
"Properties" : {
"DesiredCapacity" : { "Ref" : "CapacitySize" },
"LaunchConfigurationName" : { "Ref" : "AutoScalingLaunchConfig" },
"MaxSize" : { "Ref" : "CapacitySize" },
"MinSize" : { "Ref" : "CapacitySize" },
"AvailabilityZones" : [
{ "Fn::FindInMap" : [ "AzMap", { "Ref" : "AWS::Region" }, "Az1" ] },
{ "Fn::FindInMap" : [ "AzMap", { "Ref" : "AWS::Region" }, "Az2" ] }
],
"Tags" : [
{ "Key" : "Name", "Value" : { "Ref" : "Name" }, "PropagateAtLaunch" : true }
]
}
}
},
"Outputs": {
}
}
パラメータで”CapacitySize”が指定できるようにしていますが、このサイズは、 “AutoScalingGroup”の”DesiredCapacity”、”MaxSize”、”MinSize”に指定されるようになっています。
これで常に、指定された数”CapacitySize”のみEC2が起動している状態になります。
それでは、上記のテンプレートを使ってみました。
まずは”CapacitySize”を”2″でスタックを作成します。
スタックが無事、作成できたことが確認できます。
“AutoScaling”でEC2が2インスタンス起動していることも確認できます。
次にスタックをアップデートすることにより、起動しているEC2を増やしてみます。
今度は”CapacitySize”を”8″にします。
スタックが無事、アップデートしたことが確認できます。
“AutoScaling”でEC2が8インスタンスに変更されたことが確認できます。
AutoScalingはCloudFormationで管理した方がいいかも