Last active
May 4, 2019 13:33
-
-
Save vadirajks/73e5589f194cf87fab9e9bc02dd3adad to your computer and use it in GitHub Desktop.
aws_autoscaling_workaround
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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