Let’s dive into setting up an auto-scaling policy on AWS Fargate using CloudWatch alarms for CPU and memory utilization. This practical guide will help you manage your Fargate service more efficiently, ensuring it scales in response to the load.

Streamlining Fargate with Auto-Scaling Policies

Running a web application on AWS Fargate can become costly if not managed properly. To handle varying traffic and maintain performance without overspending, auto-scaling is a great strategy. Here’s how I set up auto-scaling for my Fargate service hosting my blog, using CPU and memory utilization metrics.

Setting Up CloudWatch Alarms

The first step involves setting up CloudWatch alarms that trigger scaling actions:

  1. CPU Utilization Alarm:
    • High CPU Usage: I created an alarm to trigger when the average CPU utilization exceeds 50% over a 5-minute period.
    • Low CPU Usage: Another alarm triggers when the CPU drops below 50% for the same period.
  2. Memory Utilization Alarm:
    • Similar to CPU, one alarm for high memory usage (above 50%) and one for low (below 50%).

These alarms are fundamental in monitoring resource use and making decisions on when to scale.

Configuring Auto-Scaling Policies

After setting the alarms, I configured the auto-scaling policies in the ECS service:

  • Step Scaling: I attached four step scaling policies to the alarms. Two for scaling up when high thresholds are met and two for scaling down when usage is low.
  • Task Limits: Set minimum tasks to 1 and maximum to 3, ensuring that my service scales between these limits based on the defined policies.

Implementing Scaling Actions

Each scaling policy adds or removes one task based on the specific CloudWatch alarm:

  • Scale Out: Adds a task when CPU or memory usage is high.
  • Scale In: Removes a task when usage falls below the threshold.

Testing the Setup

To ensure everything was working as expected, I tested the auto-scaling by simulating different loads to trigger the alarms using the AWS cloudwatch cli:

aws cloudwatch set-alarm-state --alarm-name "myAlarm" --state-value ALARM --state-reason "testing purposes"

The test was successful! My ECS service automatically created and drained a new task!


Implementing auto-scaling on AWS Fargate using CloudWatch alarms for CPU and memory utilization not only optimizes cost but also enhances the performance and reliability of your application. With this setup, my blog can now automatically adjust to traffic changes, maintaining smooth operation without manual intervention.

Happy scaling!