AWS ECR cost explained: storage is cheap, data transfer is the bill
Elastic Container Registry charges $0.10 per GB-month of image storage — trivial for most teams. The real cost is data transfer: cross-region and internet pulls add up, while pulls to ECS or EKS in the same region are free. Here is the full breakdown.
Quick answer
ECR bills $0.10 per GB-month for stored images and standard AWS data transfer for pulls. Pulls to ECS or EKS in the same region are free, so most of the bill comes from cross-region replication and internet pulls, not storage. Prune old tags with a lifecycle policy and keep pulls in-region to keep it near zero.
Elastic Container Registry is one of the cheapest services on your bill until it is not, and the surprise is never the storage line. Storage is a flat, small per-gigabyte charge. The cost that grows is data transfer, which depends entirely on where your images are pulled from.
The two things ECR charges for
| Dimension | Rate | Notes |
|---|---|---|
| Image storage | $0.10 / GB-month | Across all repositories in a region |
| Pull, same region to AWS compute | Free | ECS, EKS, EC2 in the same region |
| Pull, cross-region | Standard inter-region transfer | Billed per GB moved |
| Pull, to internet | Standard egress | Self-managed nodes, CI, on-prem |
A hundred gigabytes of images is ten dollars a month to store. The same images pulled thousands of times across regions or to the public internet can dwarf that, which is why transfer is where you look first. See AWS data transfer costs for the per-gigabyte detail.
Keep pulls in region
The single biggest lever is topology. If your ECS tasks or EKS nodes pull from a registry in the same region, the transfer is free. Problems appear when a CI runner outside AWS, a node in another region, or a laptop pulls images repeatedly. Replicate the registry into each region you run in so pulls stay local, and cache in CI so a build does not re-pull base layers every run.
Prune storage with a lifecycle policy
Storage creeps because every build pushes a new tag and nothing deletes the old ones. An ECR lifecycle policy that expires untagged images and caps the number of versions per repository holds storage flat without a human in the loop. It is the container-registry version of the cleanup habit in the reduce-your-cloud-bill checklist.
Replication is convenient and doubles storage
Cross-region replication makes pulls fast and free in each region, but you pay the one-time transfer to replicate plus storage in every region you replicate to. For a large registry that is real money. Replicate only the regions you actually deploy to, and only the repositories those regions need, rather than mirroring everything everywhere.
FAQ
How much does ECR storage cost?
ECR image storage is $0.10 per GB-month, summed across all repositories in a region. For most teams this is a few dollars to low tens of dollars a month, so storage is rarely the concern, data transfer is.
Are ECR pulls free?
Pulls to AWS compute (ECS, EKS, EC2) in the same region are free. Cross-region pulls and pulls to the internet (self-managed nodes, external CI, on-prem) are billed at standard AWS data transfer rates, which is where most of the ECR bill comes from.
How do I reduce ECR data transfer cost?
Keep pulls in-region by replicating the registry to each region you deploy in, cache base layers in CI so builds do not re-pull every run, and avoid pulling large images to the public internet. In-region pulls to AWS compute are free.
Does a lifecycle policy reduce ECR cost?
Yes, for the storage portion. A lifecycle policy that expires untagged images and caps versions per repository stops storage from creeping upward as every build pushes new tags. It does not affect transfer cost.
Is cross-region replication worth the cost?
It is worth it when you run in multiple regions and want fast, free in-region pulls, but it multiplies storage by the number of regions and adds a one-time transfer to replicate. Replicate only the regions and repositories you actually deploy, not everything.
Does C3X estimate ECR cost?
C3X prices the aws_ecr_repository and related resources from your Terraform, so you see the storage line before deploy. Transfer depends on pull volume and topology, which you provide as a usage assumption for a complete estimate.
What to do next
Estimate your registry before you deploy. C3X reads your Terraform, prices ECR and the rest of your resources against a live catalog, and runs locally or in CI. Start with the quickstart.
Share this post
Try C3X on your own Terraform
Free and open source. No API key required. One command to install, one command to estimate.