Skip to main content
orphan · gcp

Stopped Compute Engine VMs whose disks and static IPs keep billing

resource types
1
rule IDs covered
1
severity
low

What does ZopNight detect here?

Compute Engine stops charging for vCPU and memory once a VM reaches `TERMINATED`, but attached disks and external IP addresses bill for as long as they exist. ZopNight flags stopped standalone VMs, outside any managed instance group or GKE node pool, and reports the priced cost of their attached disks and reserved static IPs as the saving.

Signal and threshold

How ZopNight evaluates Stopped Compute Engine VMs whose disks and static IPs keep billing.
Field Value
Rule IDsRC-109
Categoryorphan
Severitylow
Metricnone — pure configuration read
Thresholdstatus TERMINATED, not group-managed
SourceZopNight
Permissions usedcompute.instances.list · compute.instances.get · compute.disks.list · compute.addresses.list

Stopping a VM ends compute billing, not storage billing

Google’s instance lifecycle page lists when each charge applies. CPU is billed only in RUNNING and PENDING_STOP; memory adds SUSPENDING and SUSPENDED. Stopping moves a VM to TERMINATED, where neither applies. But “for attached resources like disks or external IP addresses, you incur charges while the resources exist, regardless of the compute instance state.”

A static external IP stays billable too. VPC network pricing treats an address associated with a VM as in use “whether the instance is running or stopped”, so it keeps the in-use hourly rate. A VM stopped months ago is a disk and address bill with no workload behind it.

Finding stopped VMs and what they still hold

Terminal window
gcloud compute instances list \
--filter="status=TERMINATED" \
--format="table(name,zone,machineType,lastStopTimestamp)"

For each candidate, gcloud compute instances describe VM_NAME --zone=ZONE shows its disks and their autoDelete setting. gcloud compute addresses list shows reserved addresses and whether each is in use.

Which stopped VMs qualify

  1. The VM’s status is TERMINATED.
  2. It is standalone. VMs that belong to a managed instance group or a GKE node pool are skipped, because their parent controls when they stop and start.
  3. At least one attached persistent disk or reserved static IP has a real price.

There is no minimum stop duration, so check the stop time before acting on a VM stopped recently.

When a stopped VM produces no finding

If none of the VM’s attached disks or addresses can be priced, ZopNight raises nothing rather than a $0 card, and it never substitutes the compute rate of a machine that is not running. A VM that is running but barely used belongs to Idle GCP VM Instance instead.

Adding up disks and addresses

Terminal window
saving = sum of priced attached persistent disks + sum of priced reserved static IPs
cost after fix = 0

The breakdown shows persistent disk and static IP amounts separately, and they add up to the total.

Retiring a stopped VM cleanly

  1. Check that it is not a batch worker stopped on purpose, and that nothing starts it on a schedule.
  2. Snapshot any disk whose data may be needed again.
  3. Delete the VM with gcloud compute instances delete VM_NAME --zone=ZONE. Disks with autoDelete set to false survive; delete them with gcloud compute disks delete.
  4. Release reserved addresses with gcloud compute addresses delete ADDRESS_NAME --region=REGION.
  5. If the VM should be running after all, start it with gcloud compute instances start VM_NAME --zone=ZONE.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

472 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

472 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·