I want to configure Amazon Elastic Container Service (Amazon ECS) service auto scaling on AWS Fargate.
Short description
To increase or decrease your task count, integrate Amazon ECS on Fargate with Amazon CloudWatch alarms and AWS Application Auto Scaling. Then, you can use CloudWatch metrics to configure your CloudWatch alarms.
When your CloudWatch alarm initiates an auto scaling, Application Auto Scaling uses the configured scaling policy to determine the new count. Then, Application Auto Scaling makes the UpdateService API call to Amazon ECS with the new count value. The Amazon ECS service scheduler launches or shuts down tasks to meet the new count. Your scaling activity remains in the InProgress state until the new count and the running count are the same.
Resolution
Note: The AWS Identity and Access Management (IAM) user that accesses service auto scaling settings must have the appropriate permissions for the services that support dynamic scaling. For more information, see IAM permissions required for service auto scaling.
Amazon ECS console
To configure Amazon ECS service auto scaling on Fargate, use the Amazon ECS console to configure service auto scaling. Then, add the scaling policy to the service.
Configure service auto scaling
When you create or update a service in the Amazon ECS console, under Service auto scaling, complete the following steps:
- Select the Use service auto scaling option.
- For Minimum number of tasks, enter the lowest number of tasks that you want service auto scaling to use.
- For Maximum number of tasks, enter the highest number of tasks that you want service auto scaling to use.
Note: The minimum and maximum number of tasks are hard limits for your service.
Add a scaling policy to the service
Based on your requirements, choose either a target tracking policy or step scaling policy:
- Target tracking policies: Complete the steps under To configure target scaling policies for your Amazon ECS service using the Amazon ECS console on Target tracking scaling policies.
- Step scaling policies: Complete the steps under To configure step scaling policies for your Amazon ECS service using the Amazon ECS console on Step scaling policies.
AWS CLI
Note: If you receive errors when you run AWS Command Line Interface (AWS CLI) commands, then see Troubleshoot AWS CLI errors. Also, make sure that you're using the most recent AWS CLI version.
To configure Amazon ECS service auto scaling on Fargate, use the AWS CLI to configure service auto scaling. Then, create a target tracking or step scaling policy to scale based on the values that you set.
Configure service auto scaling
To register your Fargate service as a scalable target with Application Auto Scaling, run the following command:
aws application-autoscaling register-scalable-target \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/<cluster>/<service-name> \
--min-capacity 1 --max-capacity 10 --region us-east-1
Create a target tracking or step scaling policy
Create a target tracking or step scaling policy for the scalable target. In the following example, your Fargate service is the scalable target.
Target tracking policy:
aws application-autoscaling put-scaling-policy \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/<cluster>/<service-name> \
--policy-name Test-target-tracking-scaling-policy --policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{ "TargetValue": 75.0, "PredefinedMetricSpecification": {"PredefinedMetricType": "ECSServiceAverageCPUUtilization" }, "ScaleOutCooldown": 60,"ScaleInCooldown": 60}'
Note: When you create your target tracking policy, Application Auto Scaling creates CloudWatch alarms for scaling based on the target values that you choose.
Step scaling policy:
-
Create a step scaling policy with the required step adjustments for your scale out activity:
aws application-autoscaling put-scaling-policy \
--service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/<cluster>/<service-name> \
--policy-name Test-Step-scaling-policy-ScaleOut --policy-type StepScaling \
--step-scaling-policy-configuration '{"AdjustmentType": "ExactCapacity","StepAdjustments": [ { "MetricIntervalLowerBound": 20, "ScalingAdjustment": 10}, { "MetricIntervalLowerBound": 0, "MetricIntervalUpperBound": 20,"ScalingAdjustment": 5}],"Cooldown": 60, "MetricAggregationType": "Average"}'
-
Associate your scaling policy as an alarm action to your CloudWatch alarm:
aws cloudwatch put-metric-alarm \
--alarm-name Test-ScaleOut --metric-name MemoryUtilization \
--namespace AWS/ECS --statistic Average --period 60 --threshold 60 \
--comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --datapoints-to-alarm 1 \
--dimensions Name=ClusterName,Value=<cluster> Name=ServiceName,Value=<service-name> --unit Percent \
--alarm-actions "arn:aws:autoscaling:us-east-1:xxxxxxx:scalingPolicy:xxxxxx/Test-Step-scaling-policy-ScaleOut"
-
Repeat the steps to create a second step scaling policy and CloudWatch alarm for the scale in activity.
Note: When CloudWatch is scaling out, all scale in activity that CloudWatch starts is blocked until the scale out activity completes. The InProgress scale out activity times out when Amazon ECS doesn't meet the configured count that Application Auto Scaling set. Common reasons for a timeout include image or networking issues. If CloudWatch metrics start to scale in during the scale-out cooldown and a scale-out activity completes, then a scale-in activity is run.
Related information
Troubleshooting service auto scaling
Service auto scaling
DescribeScalingActivities
application-autoscaling