class RenderCFN::AutoScalingGroup
Public Class Methods
new( arguments)
click to toggle source
# File lib/renderCFN/autoScalingGroup.rb, line 5 def initialize( arguments) @name = "#{arguments[:name]}AutoScalingGroup" @awsObject = { @name => { 'Type' => 'AWS::AutoScaling::AutoScalingGroup', 'Properties' => { 'TerminationPolicies' => [ 'OldestInstance' ], 'HealthCheckType' => arguments[:healthCheckEmergencyOverride] || arguments[:healthCheck], 'HealthCheckGracePeriod' => arguments[:healthCheckGracePeriod], 'LaunchConfigurationName' => { 'Ref' => "#{arguments[:name]}LaunchConfiguration" }, 'VPCZoneIdentifier' => Array.new, 'MinSize' => arguments[:minSize], 'MaxSize' => arguments[:maxSize], 'Cooldown' => 300, 'Tags' => [ { 'Key' => 'Name', 'Value' => "#{arguments[:serviceTitle]}", 'PropagateAtLaunch' => true }, { 'Key' => 'stack', 'Value' => "#{@@environmentType}", 'PropagateAtLaunch' => true }, { 'Key' => 'application', 'Value' => "#{arguments[:serviceTitle]}", 'PropagateAtLaunch' => true }, { 'Key' => 'StackName', 'Value' => "#{@@stackName}", 'PropagateAtLaunch' => true }, { 'Key' => 'PMData', 'Value' => "#{arguments[:pmData]}", 'PropagateAtLaunch' => true } ] }, 'DependsOn' => [] } } #I do not know why I have to do it this way... shrug arguments[:subnetList].each do |subnet| @awsObject[@name]['Properties']['VPCZoneIdentifier'].push( subnet) end unless arguments[:noelb] then @awsObject[@name]['Properties']['LoadBalancerNames'] = Array.new @awsObject[@name]['Properties']['LoadBalancerNames'].push( 'Ref' => "#{arguments[:name]}ElasticLoadBalancer" ) @awsObject[@name]['DependsOn'].push( "#{arguments[:name]}ElasticLoadBalancer") end @awsObject[@name]['DependsOn'].push( "#{arguments[:name]}LaunchConfiguration") if arguments[:autoScalingRollingUpdateEnabled] @awsObject[@name]['UpdatePolicy'] = { 'AutoScalingRollingUpdate' => { 'MinInstancesInService' => arguments[:minInstancesInService], 'MaxBatchSize' => arguments[:maxBatchSize], 'PauseTime' => "PT#{90 + arguments[:healthCheckGracePeriod]}S" } } end end
Public Instance Methods
addCpuScaling( args)
click to toggle source
# File lib/renderCFN/autoScalingGroup.rb, line 55 def addCpuScaling( args) cpuMetrics = {'ExtendedStatistic' => args[:cpuPercentile] || 'p90'} if args[:cpuMetric] == 'Average' then cpuMetrics = {'Statistic' => 'Average'} end stuff = { "#{@name}ScaleUP" => { 'Type' => 'AWS::AutoScaling::ScalingPolicy', 'Properties' => { 'AutoScalingGroupName' => { 'Ref' => @name, }, 'AdjustmentType' => 'ChangeInCapacity', 'ScalingAdjustment' => args[:changeUP] } }, "#{@name}ScaleDOWN" => { 'Type' => 'AWS::AutoScaling::ScalingPolicy', 'Properties' => { 'AutoScalingGroupName' => { 'Ref' => @name, }, 'AdjustmentType' => 'ChangeInCapacity', 'ScalingAdjustment' => args[:changeDOWN] } }, "#{@name}AlarmUP" => { 'Type' => 'AWS::CloudWatch::Alarm', 'Properties' => { 'ComparisonOperator' => 'GreaterThanOrEqualToThreshold', 'EvaluationPeriods' => 2, 'MetricName' => 'CPUUtilization', 'Namespace' => 'AWS/EC2', 'Period' => 300, 'Threshold' => args[:cpuUP], 'AlarmActions' => [ 'Ref' => "#{@name}ScaleUP" ], "Dimensions" => [{ "Name" => "AutoScalingGroupName", "Value" => { "Ref" => @name } }] }.merge!(cpuMetrics) }, "#{@name}AlarmDOWN" => { 'Type' => 'AWS::CloudWatch::Alarm', 'Properties' => { 'ComparisonOperator' => 'LessThanOrEqualToThreshold', 'EvaluationPeriods' => 8, 'MetricName' => 'CPUUtilization', 'Namespace' => 'AWS/EC2', 'Period' => 300, 'Threshold' => args[:cpuDOWN], 'AlarmActions' => [ 'Ref' => "#{@name}ScaleDOWN" ], "Dimensions" => [{ "Name" => "AutoScalingGroupName", "Value" => { "Ref" => @name } }] }.merge!(cpuMetrics) } } @awsObject.merge!( stuff) end