GCE instances in a project
Lists Compute Engine instances across every zone in a project. Supplying only the project routes to the aggregated list, which covers all zones in a single request - far cheaper than iterating zones, and it avoids missing instances in zones you did not think to check.
Query
SELECT name, status, machineType, zone, creationTimestamp
FROM google.compute.instances
WHERE project = '{{project}}';
Variation: a single zone
Adding zone routes to the per-zone list instead:
SELECT name, status, machineType, zone, creationTimestamp
FROM google.compute.instances
WHERE project = '{{project}}'
AND zone = 'us-central1-a';
Notes
Project alone routes to aggregated_list and zone narrows it to the per-zone list - two different operations on one resource, so the aggregated form is the one to reach for unless a specific zone is genuinely the question. The per-zone form has a reporting quirk worth knowing: a zone with no instances returns a single row whose columns are all null except the zone that was requested, rather than zero rows, so test a data column such as name for null rather than counting rows. machineType and zone come back as full resource URLs - take the last path segment for the short name. TERMINATED in GCE means stopped rather than deleted, and stopped instances still appear here and still bill for attached disks, so filter on status when counting live capacity.