Explanation
Why the waste happens and who it affects.
Image build pipelines (Packer, CI jobs, golden-image processes) typically publish a new image version for every OS patch cycle or application release, and old versions are often never deleted. Images imported for migrations or created as ad hoc backups before changes accumulate the same way.
Deprecating an image does not remove it: Google's image management guidance notes that even images marked DELETED keep their data until an explicit delete command is sent. The result is a growing library of superseded images per image family, each billed every month.
Billing model
The pricing dimensions that drive this cost.
Rates depend on the image storage location.
- Custom image storage
- Billed per GiB of stored image data for as long as the image exists
- Deprecation states
- DEPRECATED, OBSOLETE and DELETED states control launch behavior only; the image is billed until it is actually deleted
- Machine images
- Machine images are a separate stored resource billed by size and storage location
- No transfer fee
- Creating images, and creating disks from images, has no network transfer fee
How to detect
4 checks to find it in your estate.
- Review the Idle custom image recommender (google.compute.image.IdleResourceRecommender, "Remove unused images"); it flags images that were not used to create a disk for at least 15 days and are not referenced by any instance template
- List images per family with gcloud compute images list --no-standard-images --show-deprecated and sort by creationTimestamp to find superseded versions
- Include images in DEPRECATED, OBSOLETE or DELETED state, which are hidden from default listings but still billed
- Check which images are referenced by instance templates, MIGs, Terraform or other projects (shared images) before deleting
How to fix
4 ways to remove the waste.
- Delete superseded image versions with gcloud compute images delete, keeping only the versions needed for rollback (for example the last few per family)
- Add retention logic to image build pipelines so each new release deprecates the previous image and deletes versions beyond the rollback window
- Follow up on deprecations with an explicit delete; setting the DELETED state alone does not remove the data
- Delete one-off pre-change and migration images once the change is validated, and prefer machine images or snapshots with their own retention for short-term rollback copies
Documentation
Vendor references for pricing and configuration.