Back to Checks
aws

Amazon EC2 Auto Scaling group has Capacity Rebalancing enabled

autoscaling_group_capacity_rebalance_enabled
Service: autoscalingSeverity: medium
OfficialBuilt-inVerified
Categories:resilience
Resource Type:AwsAutoScalingAutoScalingGroup

EC2 Auto Scaling groups use Capacity Rebalancing to act on EC2 rebalance recommendations by launching replacement Spot instances and terminating at-risk ones after they are healthy.

Assesses whether this proactive replacement behavior is enabled.

Risk

Without Capacity Rebalancing, Spot interruptions can drop targets and reduce capacity, causing timeouts, 5xx spikes, and backlog growth. The two-minute notice is often insufficient, reducing service availability and increasing the chance of cascading failures and slow recovery.

Run this check with Prowler

Run in Prowler Cloud
Run
prowler aws --checks autoscaling_group_capacity_rebalance_enabled

Recommendation

Enable Capacity Rebalancing for ASGs that use Spot.

Apply resilience practices:

  • Prefer price-capacity-optimized allocation
  • Keep headroom below MaxSize
  • Use lifecycle hooks to drain/deregister
  • Design stateless, interruption-tolerant workloads (least privilege and defense-in-depth for dependencies)

Remediation

CLI

aws autoscaling update-auto-scaling-group --auto-scaling-group-name <example_resource_name> --capacity-rebalance

Terraform

# Terraform: Enable Capacity Rebalancing on an Auto Scaling group
resource "aws_autoscaling_group" "<example_resource_name>" {
  name               = "<example_resource_name>"
  min_size           = 1
  max_size           = 1
  desired_capacity   = 1
  availability_zones = ["<example_az>"]

  launch_template {
    id    = "<example_resource_id>"
    version = "$Latest"
  }

  capacity_rebalance = true  # CRITICAL: Turns on Capacity Rebalancing
}

NativeIaC

# CloudFormation: Enable Capacity Rebalancing on an Auto Scaling group
Resources:
  <example_resource_name>:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      MinSize: "1"
      MaxSize: "1"
      AvailabilityZones: ["<example_az>"]
      LaunchTemplate:
        LaunchTemplateName: <example_resource_name>
        Version: "$Default"
      CapacityRebalance: true  # CRITICAL: Enables proactive replacement of at-risk Spot instances

Other

1In the AWS Console, go to EC2 > Auto Scaling Groups
2Select <example_resource_name> and open the Details tab
3Click Allocation strategies > Edit, check Capacity rebalancing
4Click Update/Save

Check Code

from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.autoscaling.autoscaling_client import (
    autoscaling_client,
)


class autoscaling_group_capacity_rebalance_enabled(Check):
    def execute(self):
        findings = []
        for group in autoscaling_client.groups:
            if group.load_balancers and group.target_groups:
                report = Check_Report_AWS(metadata=self.metadata(), resource=group)

                report.status = "FAIL"
                report.status_extended = f"Autoscaling group {group.name} does not have capacity rebalance enabled."
                if group.capacity_rebalance:
                    report.status = "PASS"
                    report.status_extended = f"Autoscaling group {group.name} has capacity rebalance enabled."

                findings.append(report)

        return findings