share facebook facebook2 twitter menu hatena pocket slack

2013.07.04 THU

CloudFormationでパラメータで指定した数のEC2を起動する

鈴木 宏康

WRITTEN BY鈴木 宏康

表題に関して、そもそも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で管理した方がいいかも

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。