Pre-Scale AWS Auto Scaling Groups and ECS for Black Friday
Two scheduled actions per target: one that raises the floor before the doors open, one that puts the original numbers back after Cyber Monday.
Reactive scaling adds capacity after load arrives. For a sale with a known start time you can book the capacity in advance with scheduled actions, which exist for both EC2 Auto Scaling groups and ECS services (through Application Auto Scaling). This walkthrough pre-scales both for Black Friday 2026 (Friday 27 November) and scales back on Tuesday 1 December.
Permissions
- EC2 Auto Scaling: the
PutScheduledUpdateGroupActionandDeleteScheduledActionAPI calls, plusautoscaling:Describe*for the checks. - Application Auto Scaling (ECS):
application-autoscaling:RegisterScalableTarget,application-autoscaling:PutScheduledAction,application-autoscaling:DescribeScheduledActionsandapplication-autoscaling:DeleteScheduledAction.
1. Write down today’s numbers
The scale-back action has to restore these, so record them before changing anything:
aws autoscaling describe-auto-scaling-groups \ --auto-scaling-group-names shop-web-asg \ --query "AutoScalingGroups[0].[MinSize,MaxSize,DesiredCapacity]"For the ECS service, aws application-autoscaling describe-scalable-targets --service-namespace ecs returns the current MinCapacity and MaxCapacity if it is already registered.
2. Auto Scaling group: raise the floor, then lower it
One-time actions use --start-time, which must be UTC in YYYY-MM-DDThh:mm:ssZ form. (--time-zone applies to cron --recurrence schedules, not to a one-off start time.) The scale-up below runs at 09:00 UTC, which is 04:00 US Eastern on the Friday, two hours before a 06:00 Eastern opening:
aws autoscaling put-scheduled-update-group-action \ --auto-scaling-group-name shop-web-asg \ --scheduled-action-name bf26-scale-up \ --start-time "2026-11-27T09:00:00Z" \ --min-size 12 --max-size 40 --desired-capacity 12
aws autoscaling put-scheduled-update-group-action \ --auto-scaling-group-name shop-web-asg \ --scheduled-action-name bf26-scale-down \ --start-time "2026-12-01T15:00:00Z" \ --min-size 3 --max-size 12 --desired-capacity 3Raising --min-size, not only desired capacity, matters: AWS keeps current capacity within the minimum and maximum the scheduled action set, so a dynamic policy cannot scale you back below 12 during a quiet hour on the day, while it can still scale out up to 40.
AWS limits to know: at most 125 scheduled actions per group; names must be unique per group; two actions cannot share a start time; and an action can run up to two minutes late, so start well before you need the capacity.
3. ECS service: same pattern through Application Auto Scaling
Register the service as a scalable target if it is not already, then add the two actions. Here --timezone does apply to an at() expression:
aws application-autoscaling register-scalable-target \ --service-namespace ecs \ --resource-id service/shop-cluster/checkout \ --scalable-dimension ecs:service:DesiredCount \ --min-capacity 4 --max-capacity 20
aws application-autoscaling put-scheduled-action \ --service-namespace ecs \ --resource-id service/shop-cluster/checkout \ --scalable-dimension ecs:service:DesiredCount \ --scheduled-action-name bf26-checkout-up \ --schedule "at(2026-11-27T04:00:00)" --timezone "America/New_York" \ --scalable-target-action MinCapacity=16,MaxCapacity=60
aws application-autoscaling put-scheduled-action \ --service-namespace ecs \ --resource-id service/shop-cluster/checkout \ --scalable-dimension ecs:service:DesiredCount \ --scheduled-action-name bf26-checkout-down \ --schedule "at(2026-12-01T10:00:00)" --timezone "America/New_York" \ --scalable-target-action MinCapacity=4,MaxCapacity=20If the current task count is below the new minimum when the action runs, Application Auto Scaling scales out to it. Deregistering the scalable target deletes its scheduled actions, so do not deregister during the sale window.
4. Verify before the day
aws autoscaling describe-scheduled-actions --auto-scaling-group-name shop-web-asgaws application-autoscaling describe-scheduled-actions --service-namespace ecs \ --resource-id service/shop-cluster/checkoutOn the morning itself, aws autoscaling describe-scaling-activities --auto-scaling-group-name shop-web-asg shows the launches the action triggered.
5. Cancel or change
aws autoscaling delete-scheduled-action --auto-scaling-group-name shop-web-asg --scheduled-action-name bf26-scale-up removes an action; the ECS equivalent is aws application-autoscaling delete-scheduled-action with the same resource flags. Remember to delete or adjust the matching scale-down.
Databases are not covered by any of this. Size them for the peak separately.
Running it as an event in ZopNight
ZopNight’s Event Readiness wizard creates these same cloud-native scheduled actions for ASGs and ECS services (and for GCP MIGs and Azure VMSS) from a multiplier on baseline or an expected request count. It snapshots the original min, max and desired values and restores them when the event completes or is cancelled, shows an estimated cost before you schedule, and treats attached databases as monitor-only, returning sizing guidance without changing them. Background is in the event readiness playbook; the ASG resource notes are on ASG scheduling.