Skip to content
Cloud Efficiency Hub

Unused Custom Compute Engine Images

The short version

Custom images are billed for storage for as long as they exist, whether or not any VM or disk is ever created from them again.

PointFive Research

Cloud cost research at PointFive

Category
Storage
Reference
CER-0465
Type
Excessive Data Retention

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.