Adding a Capacity Provider to an ECS Cluster with Terraform18 Jul 2023
I recently had to use terraform to add a capacity provider to an existing ECS cluster.
After adding a default capacity provider to the cluster, existing services still have a
launch_type=EC2, so we need to update them to use a
capacity_provider_strategy in order to use it. Unfortunately we can’t do this in terraform due to a long-standing bug:
When an ECS cluster has a
default_capacity_provider_strategysetting defined, Terraform will mark all services that don’t have
ignore_changes=[capacity_provider_strategy]to be recreated.
The ECS service actually does support changing from
capacity_provider_strategy non-destructively, by forcing a redeploy. Since this uses the service’s configured deployment mechanism there’s no disruption.
We can also set this using the CLI:
aws ecs update-service --cluster my-cluster --service my-service --capacity-provider-strategy capacityProvider=ec2,weight=100,base=0 --force-new-deployment
If for some reason we need to revert, ECS also supports changing back from
launch_type, however the option is disabled in the console:
As a workaround, we can pass an empty list of capacity providers to the
update-service command, which will result in the service using
aws ecs update-service --cluster my-cluster --service my-service --capacity-provider-strategy '' --force-new-deployment