阅读背景:

OpenStack-Heat中的Autoscaling - AWS的autoscaling

来源:互联网 
在Heat中完全使用aws的语法创建一套autoscaling的template。
流程:Create LaunchConfig (Create basic instance, send mem status to ALARM) ->Create ASGroup (Define instance num range) ->Create ScaleUpPolicy (+1 instance when mem_alarm_high) ->Create MEMAlarmHigh (Monitor mem status) ->Create ScaleDownPolicy (-1 instance when mem_alarm_low) ->Create MEMAlarmLow (monitor mem status)
Template模板:    "ASGroup" : {      "Type" : "AWS::AutoScaling::AutoScalingGroup",      "Properties" : {        "AvailabilityZones" : ["nova"],        "LaunchConfigurationName" : { "Ref" : "LaunchConfig" },        "MinSize" : "1",        "MaxSize" : "10"      }    },    "ScaleUpPolicy" : {      "Type" : "AWS::AutoScaling::ScalingPolicy",      "Properties" : {        "AdjustmentType" : "ChangeInCapacity",        "AutoScalingGroupName" : { "Ref" : "ASGroup" },        "Cooldown" : "60",        "ScalingAdjustment" : "1"      }    },    "MEMAlarmHigh": {     "Type": "AWS::CloudWatch::Alarm",     "Properties": {        "AlarmDescription": "Scale-up if MEM > 70% for 1 minute",        "MetricName": "MemoryUtilization",        "Namespace": "system/linux",        "Statistic": "Average",        "Period": "60",        "EvaluationPeriods": "1",        "Threshold": "70",        "AlarmActions": [ { "Ref": "ScaleUpPolicy" } ],        "Dimensions": [          {            "Name": "AutoScalingGroupName",            "Value": { "Ref": "ASGroup" }          }        ],        "ComparisonOperator": "GreaterThanThreshold"      }    },    "ScaleDownPolicy" : {      "Type" : "AWS::AutoScaling::ScalingPolicy",      "Properties" : {        "AdjustmentType" : "ChangeInCapacity",        "AutoScalingGroupName" : { "Ref" : "ASGroup" },        "Cooldown" : "60",        "ScalingAdjustment" : "-1"      }    },    "MEMAlarmLow": {     "Type": "AWS::CloudWatch::Alarm",     "Properties": {        "AlarmDescription": "Scale-down if MEM < 30% for 1 minute",        "MetricName": "MemoryUtilization",        "Namespace": "system/linux",        "Statistic": "Average",        "Period": "60",        "EvaluationPeriods": "1",        "Threshold": "30",        "AlarmActions": [ { "Ref": "ScaleDownPolicy" } ],        "Dimensions": [          {            "Name": "AutoScalingGroupName",            "Value": { "Ref": "ASGroup" }          }        ],        "ComparisonOperator": "LessThanThreshold"      }    },    "LaunchConfig" : {      "Type" : "AWS::AutoScaling::LaunchConfiguration",      "Metadata" : {        "AWS::CloudFormation::Init" : {          "config" : {            "files" : {              "/etc/cfn/cfn-credentials" : {                "content" : { "Fn::Join" : ["", [                  "AWSAccessKeyId=", { "Ref" : "LSFKeys" }, "\n",                  "AWSSecretKey=", {"Fn::GetAtt": ["LSFKeys",                                    "SecretAccessKey"]}, "\n"                ]]},                "mode"    : "000400",                "owner"   : "root",                "group"   : "root"              },                "/tmp/stats-crontab.txt" : {                "content" : { "Fn::Join" : ["", [                "MAIL=\"\"\n",                "\n",                "* * * * * /opt/aws/bin/cfn-push-stats --watch ",                { "Ref" : "MEMAlarmHigh" }, " --mem-util\n",                "* * * * * /opt/aws/bin/cfn-push-stats --watch ",                { "Ref" : "MEMAlarmLow" }, " --mem-util\n"                ]]},                "mode"    : "000600",                "owner"   : "root",                "group"   : "root"              }            }          }        }      },       "Properties": {        "ImageId": "rhel6u4",        "InstanceType": "m1.small",        "KeyName": "poc",        "UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [          "#!/bin/bash -v\n",          "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" },          " -r VMWARELaunchConfig ",          " --region ", { "Ref" : "AWS::Region" }, "\n",          "crontab /tmp/stats-crontab.txt\n",        ]]}}      }    }  },

分享到: