2013年7月3日水曜日

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

スズキです。

そもそも、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で管理した方がいいかも...
--------
http://www.suz-lab.com

0 コメント: