Skip to content

Instantly share code, notes, and snippets.

@vadirajks
Last active May 4, 2019 13:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vadirajks/73e5589f194cf87fab9e9bc02dd3adad to your computer and use it in GitHub Desktop.
Save vadirajks/73e5589f194cf87fab9e9bc02dd3adad to your computer and use it in GitHub Desktop.
aws_autoscaling_workaround
With each Auto Scaling group, you control when it adds instances (referred to as scaling out) or removes instances (referred to as scaling in).
Launching Auto Scaling Instances in a VPC
Internet Gateways<-VPC(Route Tables)<->Subnets<->ec2
If a subnet's traffic is routed to an internet gateway, the subnet is known as a public subnet.
If a subnet's traffic is not routed to an internet gateway, the subnet is known as a private subnet.
##############################################################################################
Creating a Launch Configuration Using an EC2 Instance
aws autoscaling create-launch-configuration --launch-configuration-name my-lc-from-instance --instance-id i-a8e09d9c
aws autoscaling describe-launch-configurations --launch-configuration-names my-lc-from-instance
Create a Launch Configuration and Override the Block Devices Using the AWS CLI
aws autoscaling create-launch-configuration --launch-configuration-name my-lc-from-instance-bdm --instance-id i-a8e09d9c --block-device-mappings "[{\"DeviceName\":\"/dev/sda1\",\"Ebs\":{\"SnapshotId\":\"snap-3decf207\"}},{\"DeviceName\":\"/dev/sdf\",\"Ebs\":{\"SnapshotId\":\"snap-eed6ac86\"}}]"
aws autoscaling describe-launch-configurations --launch-configuration-names my-lc-from-instance-bdm
Create a Launch Configuration and Override the Instance Type
aws autoscaling create-launch-configuration --launch-configuration-name my-lc-from-instance-changetype --instance-id i-a8e09d9c --instance-type t2.medium
aws autoscaling describe-launch-configurations --launch-configuration-names my-lc-from-instance-changetype
IAM Role for Applications that Run on Amazon EC2 Instances
aws autoscaling create-launch-configuration --launch-configuration-name my-lc-with-instance-profile --image-id ami-baba68d3 --instance-type m1.small --iam-instance-profile my-instance-profile
##############################################################################################
Creating a Launch Template for an Auto Scaling Group
aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 --launch-template-data '{"NetworkInterfaces":[{"DeviceIndex":0,"AssociatePublicIpAddress":true,"Groups":["sg-7c227019"],"DeleteOnTermination":true}],"ImageId":"ami-01e24be29428c15b2","InstanceType":"t2.micro","TagSpecifications": [{"ResourceType": "instance","Tags": [{"Key":"name","Value":"webserver"}]}]}'
aws ec2 describe-launch-templates --launch-template-names my-template-for-auto-scaling
aws ec2 describe-launch-template-versions --launch-template-id lt-068f72b72934aff71
##############################################################################################
Simple and Step Scaling Policies for Amazon EC2 Auto Scaling:
cooldown periods only works for simple scaling policies
utilization metric- >target tracking scaling policy.
target tracking policies,step policies,simple scaling policies
You still have the option to use target tracking scaling with step scaling for a more advanced scaling policy configuration. For example, if you want, you can configure a more aggressive response when utilization reaches a certain level.
Step Scaling Policies:
warm-up time (scale out: adding systems)
does not support cooldown periods for step scaling policies.
Scaling Adjustment Types:
ChangeInCapacity
ExactCapacity
PercentChangeInCapacity
MinAdjustmentMagnitude
Configure Step Scaling Policies Using the AWS CLI
Step 1: Create an Auto Scaling Group
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --launch-configuration-name my-launch-config --max-size 5 --min-size 1 --availability-zones "us-west-2c"
Step 2: Create Scaling Policies
aws autoscaling put-scaling-policy \
--auto-scaling-group-name my-asg \
--policy-name my-scaleout-policy \
--policy-type StepScaling \
--adjustment-type PercentChangeInCapacity \
--metric-aggregation-type Average \
--step-adjustments MetricIntervalLowerBound=10.0,MetricIntervalUpperBound=20.0,ScalingAdjustment=10 \
MetricIntervalLowerBound=20.0,MetricIntervalUpperBound=30.0,ScalingAdjustment=20 \
MetricIntervalLowerBound=30.0,ScalingAdjustment=30 \
--min-adjustment-magnitude 1
aws autoscaling put-scaling-policy \
--auto-scaling-group-name my-asg \
--policy-name my-scalein-policy \
--policy-type StepScaling \
--adjustment-type ChangeInCapacity \
--step-adjustments MetricIntervalUpperBound=0.0,ScalingAdjustment=-2
##############################################################################################
Scheduled Scaling for Amazon EC2 Auto Scaling:
To schedule scaling for one time only (YYYY-MM-DDThh:mm:ssZ format in UTC):
increase:
aws autoscaling put-scheduled-update-group-action --scheduled-action-name ScaleUp --auto-scaling-group-name my-asg --start-time "2013-05-12T08:00:00Z" --desired-capacity 3
decrease:
aws autoscaling put-scheduled-update-group-action --scheduled-action-name ScaleDown --auto-scaling-group-name my-asg --start-time "2013-05-13T08:00:00Z" --desired-capacity 1
To schedule scaling on a recurring schedule:
You can specify a recurrence schedule, in UTC, using the Unix cron syntax format.
This format consists of five fields separated by white spaces: [Minute] [Hour] [Day_of_Month] [Month_of_Year] [Day_of_Week].
aws autoscaling put-scheduled-update-group-action --scheduled-action-name scaleup-schedule-year --auto-scaling-group-name my-asg --recurrence "30 0 1 1,6,12 *" --desired-capacity 3
Delete a Scheduled Action:
aws autoscaling delete-scheduled-action --scheduled-action-name ScaleUp
##############################################################################################
Target Tracking Scaling Policies for Amazon EC2 Auto Scaling
Choosing Metrics
ASGAverageCPUUtilization
ASGAverageNetworkIn
ASGAverageNetworkOut
ALBRequestCountPerTarget
Create an Auto Scaling Group
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --launch-configuration-name my-lc --max-size 5 --min-size 1 --availability-zones "us-west-2c"
Create Scaling Policies
Example: target tracking configuration file
1>
{
"TargetValue": 40.0,
"PredefinedMetricSpecification":
{
"PredefinedMetricType": "ASGAverageCPUUtilization"
}
}
2>
customized metric specification
{
"TargetValue":40.0,
"CustomizedMetricSpecification":{
"MetricName":"MyUtilizationMetric",
"Namespace":"MyNamespace",
"Dimensions":[
{
"Name":"MyOptionalMetricDimensionName",
"Value":"MyOptionalMetricDimensionValue"
}
],
"Statistic":"Average",
"Unit":"Percent"
}
}
Example: my-scaleout-policy
aws autoscaling put-scaling-policy --policy-name cpu40 --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling --target-tracking-configuration file://config.json
##############################################################################################
Set Up a Scaled and Load-Balanced Application
Classic Load Balancers, instances are registered with the load balancer.
Application Load Balancers and Network Load Balancers, instances are registered as targets with a target group.
To create the launch configuration
aws autoscaling create-launch-configuration --launch-configuration-name my-lc --image-id ami-514ac838 --instance-type m1.small
To create an Auto Scaling group with an attached Classic Load Balancer
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-lb-asg --launch-configuration-name my-lc --availability-zones "us-west-2a" "us-west-2b" --load-balancer-names "my-lb" --max-size 5 --min-size 1 --desired-capacity 2
To create an Auto Scaling group with an attached target group
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-lb-asg --launch-configuration-name my-lc --vpc-zone-identifier "subnet-41767929" --vpc-zone-identifier "subnet-b7d581c0" --target-group-arns "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/1234567890123456" --max-size 5 --min-size 1 --desired-capacity 2
##############################################################################################
Attaching a Load Balancer to Your Auto Scaling Group
To attach a Classic Load Balancer
aws autoscaling attach-load-balancers --auto-scaling-group-name my-asg --load-balancer-names my-lb
To attach a Application Load Balancers, Network Load Balancers
aws autoscaling attach-load-balancer-target-groups --auto-scaling-group-name my-asg --target-group-arns my-targetgroup-arn
To detach a Classic Load Balancer
aws autoscaling detach-load-balancers --auto-scaling-group-name my-asg --load-balancer-names my-lb
To detach a Application Load Balancers, Network Load Balancers
aws autoscaling detach-load-balancer-target-groups --auto-scaling-group-name my-asg --target-group-arns my-targetgroup-arn
##############################################################################################
Tagging Auto Scaling Groups and Instances
aws autoscaling create-or-update-tags --tags "ResourceId=my-asg,ResourceType=auto-scaling-group,Key=environment,Value=test,PropagateAtLaunch=true"
aws autoscaling describe-tags --filters Name=auto-scaling-group,Values=my-asg
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
aws autoscaling delete-tags --tags "ResourceId=my-asg,ResourceType=auto-scaling-group,Key=environment"
##############################################################################################
Attach EC2 Instances to Your Auto Scaling Group
If the number of instances being attached plus the desired capacity exceeds the maximum size of the group, the request fails.
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
aws autoscaling attach-instances --instance-ids i-a8e09d9c --auto-scaling-group-name my-asg
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
##############################################################################################
Amazon EC2 Auto Scaling Lifecycle Hooks
scale out:
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-hook --auto-scaling-group-name my-asg --lifecycle-transition autoscaling:EC2_INSTANCE_LAUNCHING
scale in:
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-hook --auto-scaling-group-name my-asg --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING
Complete the Lifecycle Hook:
aws autoscaling record-lifecycle-action-heartbeat --lifecycle-action-token bcd2f1b8-9a78-44d3-8a7a-4dd07d7cf635 --lifecycle-hook-name my-launch-hook --auto-scaling-group-name my-asg
aws autoscaling record-lifecycle-action-heartbeat --instance-id i-1a2b3c4d --lifecycle-hook-name my-launch-hook --auto-scaling-group-name my-asg
aws autoscaling complete-lifecycle-action --lifecycle-action-result CONTINUE --lifecycle-action-token bcd2f1b8-9a78-44d3-8a7a-4dd07d7cf635 --lifecycle-hook-name my-launch-hook --auto-scaling-group-name my-asg
aws autoscaling complete-lifecycle-action --lifecycle-action-result CONTINUE --instance-id i-1a2b3c4d --lifecycle-hook-name my-launch-hook --auto-scaling-group-name my-asg
##############################################################################################
Merging Your Auto Scaling Groups into a Single Multi-Zone Group
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-group-a --availability-zones "us-west-2a" "us-west-2c" –-max-size 10 –-min-size 4
aws autoscaling set-desired-capacity --auto-scaling-group-name my-group-a --desired-capacity 6
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-group-a
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-group-c --min-size 0 --max-size 0
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-group-c
aws autoscaling delete-auto-scaling-group --auto-scaling-group-name my-group-c
##############################################################################################
Health Checks for Auto Scaling Instances
aws autoscaling set-instance-health --instance-id i-123abc45d --health-status Unhealthy
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
##############################################################################################
Detach EC2 Instances from Your Auto Scaling Group
aws autoscaling describe-auto-scaling-instances
aws autoscaling detach-instances --instance-ids i-2a2d8978 --auto-scaling-group-name my-asg --should-decrement-desired-capacity
aws autoscaling describe-auto-scaling-instances
##############################################################################################
aws autoscaling describe-scaling-activities --auto-scaling-group-name my-asg
Manual Scaling for Amazon EC2 Auto Scaling
aws autoscaling set-desired-capacity --auto-scaling-group-name my-asg --desired-capacity 2
aws autoscaling set-desired-capacity --auto-scaling-group-name my-asg --desired-capacity 2 --honor-cooldown
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
Deleting Your Auto Scaling Infrastructure
aws autoscaling delete-auto-scaling-group --auto-scaling-group-name my-asg
aws autoscaling delete-launch-configuration --launch-configuration-name my-lc
aws elbv2 delete-load-balancer --load-balancer-arn my-load-balancer-arn
aws elb delete-load-balancer --load-balancer-name my-load-balancer
aws cloudwatch delete-alarms --alarm-name AddCapacity RemoveCapacity
##############################################################################################
Suspending and Resuming Scaling Processes
Scaling Processes
Launch
Terminate
HealthCheck
ReplaceUnhealthy
AZRebalance
AlarmNotification
ScheduledActions
AddToLoadBalancer
To suspend one above mentioned process
aws autoscaling suspend-processes --auto-scaling-group-name my-asg --scaling-processes AlarmNotification
To suspend all processes
aws autoscaling suspend-processes --auto-scaling-group-name my-asg
To resume one above mentioned suspended process
aws autoscaling resume-processes --auto-scaling-group-name my-asg --scaling-processes AlarmNotification
To resume all suspended processes
aws autoscaling resume-processes --auto-scaling-group-name my-asg
##############################################################################################
Monitoring Your Auto Scaling Groups and Instances Using Amazon CloudWatch
To enable group metrics using the AWS CLI
for 1 group :
aws autoscaling enable-metrics-collection --auto-scaling-group-name my-asg --metrics GroupDesiredCapacity --granularity "1Minute"
for all group :
aws autoscaling enable-metrics-collection --auto-scaling-group-name my-asg --granularity "1Minute"
To disable group metrics using the AWS CLI
aws autoscaling disable-metrics-collection --auto-scaling-group-name my-asg
aws cloudwatch list-metrics --namespace "AWS/AutoScaling"
aws cloudwatch list-metrics --namespace "AWS/AutoScaling" --dimensions Name=AutoScalingGroupName,Value=my-asg
aws cloudwatch list-metrics --namespace "AWS/AutoScaling" --metric-name GroupDesiredCapacity
##############################################################################################
Temporarily Removing Instances from Your Auto Scaling Group
aws autoscaling describe-auto-scaling-instances
aws autoscaling enter-standby --instance-ids i-5b73d709 --auto-scaling-group-name my-asg --should-decrement-desired-capacity (The --should-decrement-desired-capacity option decreases the desired capacity so that the Auto Scaling group does not launch a replacement instance.)
aws autoscaling describe-auto-scaling-instances --instance-ids i-5b73d709
aws autoscaling exit-standby --instance-ids i-5b73d709 --auto-scaling-group-name my-asg
aws autoscaling describe-auto-scaling-instances --instance-ids i-5b73d709
##############################################################################################
Adding Elastic Load Balancing Health Checks to an Auto Scaling Group
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-lb-asg --health-check-type ELB --health-check-grace-period 300
##############################################################################################
Expanding Your Scaled and Load-Balanced Application to an Additional Availability Zone
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --vpc-zone-identifier subnet-41767929 subnet-cb663da2 --min-size 2
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
aws elb attach-load-balancer-to-subnets --load-balancer-name my-lb --subnets subnet-41767929
aws elbv2 set-subnets --load-balancer-arn my-lb-arn --subnets subnet-41767929 subnet-cb663da2
##############################################################################################
Controlling Which Auto Scaling Instances Terminate During Scale In
OldestInstance
NewestInstance
OldestLaunchConfiguration
ClosestToNextInstanceHour
Default
OldestLaunchTemplate
AllocationStrategy
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --termination-policies "OldestLaunchConfiguration" "ClosestToNextInstanceHour" "Default"
To enable instance protection
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --new-instances-protected-from-scale-in ...
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --no-new-instances-protected-from-scale-in
aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --protected-from-scale-in
aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --no-protected-from-scale-in
##############################################################################################
Getting Amazon SNS Notifications When Your Auto Scaling Group Scales
autoscaling:EC2_INSTANCE_LAUNCH: Successful instance launch
autoscaling:EC2_INSTANCE_LAUNCH_ERROR: Failed instance launch
autoscaling:EC2_INSTANCE_TERMINATE: Successful instance termination
autoscaling:EC2_INSTANCE_TERMINATE_ERROR: Failed instance termination
aws autoscaling put-notification-configuration --auto-scaling-group-name my-asg --topic-arn <SNS topic> --notification-types "autoscaling:EC2_INSTANCE_LAUNCH_ERROR" "autoscaling:EC2_INSTANCE_TERMINATE_ERROR"
aws autoscaling set-desired-capacity --auto-scaling-group-name my-asg --desired-capacity 2
aws autoscaling delete-notification-configuration --auto-scaling-group-name my-asg --topic-arn arn:aws:sns:us-west-2:123456789012:my-sns-topic
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment