Compute Engine disk snapshots older than 90 days that still bill for storage
What does ZopNight detect here?
Compute Engine standard snapshots incur monthly storage charges for as long as they exist. ZopNight flags any snapshot 90 days or older, based on its `creationTimestamp`, and prices the saving from the snapshot's stored gigabytes at its per-GB snapshot storage rate. Recent snapshots and snapshots it cannot date or price are left out.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-143 |
| Category | orphan |
| Severity | low |
| Metric | none — pure configuration read |
| Threshold | snapshot age 90 days or more |
| Evaluation window | 90d |
| Source | ZopNight |
| Permissions used | compute.snapshots.list · compute.snapshots.get · compute.disks.list |
Where it applies
Snapshot storage bills until the snapshot is deleted
Google’s disk and image pricing says standard snapshots “incur monthly storage charges as long as they exist in your project”. The charge is for the compressed data stored, not the size of the source disk, and snapshots are incremental, so each one holds only what changed since the previous snapshot in the chain.
That makes old snapshots easy to ignore: each looks small, nobody remembers why it was taken, and a project that snapshots before every release can build up a long tail of them.
Listing snapshots older than 90 days
gcloud filters accept ISO 8601 durations, so this lists snapshots created more than 90 days ago with their source disk and stored bytes:
gcloud compute snapshots list \ --filter="creationTimestamp<-P90D" \ --format="table(name,sourceDisk,storageBytes,creationTimestamp)"To see every snapshot of one disk, filter on sourceDisk, as shown in
Google’s snapshot management guide.
Age is the trigger, not existence
ZopNight reads each snapshot’s creation time and fires once the snapshot is at least 90 days old. A snapshot that exists but is younger than that is never flagged, however many there are, and there is no size threshold.
Snapshots it does not report
If the creation time is missing or cannot be read, the snapshot is skipped rather than assumed old. If ZopNight has no storage size or no per-GB rate for the snapshot, it stays silent instead of reporting a zero. Snapshots whose source disk has already been deleted are tracked as a separate group in ZopNight’s inventory and are not evaluated here.
Pricing the saving from stored gigabytes
saving = snapshot stored GB x per-GB-month snapshot storage rate for that snapshotTreat it as an upper bound. Google notes that when you delete a snapshot in a chain, “some of its data may move to the next incremental snapshot”, which adds storage to that later snapshot. Deleting the oldest snapshot of a disk that still has newer ones usually frees less than its listed size.
Clearing out stale snapshots
- Check the snapshot’s labels and description for a retention reason (audit, legal hold, golden image).
- Confirm a newer snapshot of the same disk exists, or that the disk is gone and the data is not needed.
- Delete it:
gcloud compute snapshots delete SNAPSHOT_NAME. - Stop the pile from coming back by moving the disk to a snapshot schedule with
--max-retention-days, as described on GCP Persistent Disk Without Snapshot.