The GCP Compute Engine (GCE) metadata server is an extremely powerful and often underappreciated resource. Yesterday we examined how it can be used to obtain a bearer token in a fraction of the time of gcloud – so fast in fact that it allows GCS to be used as a form of simple globally-distributed queuing system.
Here are a few of the metadata values we've found the most useful (see the full list in the GCE documentation). You can wrap these up in shell scripts to make simple analysis scripts fully portable across GCP projects and fleets. Note that these only work on GCE VMs themselves.
Project-Level Values
#GCP Project ID curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google" #Numeric GCP Project ID (required by some API calls) curl -s "http://metadata.google.internal/computeMetadata/v1/project/numeric-project-id" -H "Metadata-Flavor: Google"
Instance-Level Values
#Obtain a bearer token curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google" | jq -r '.access_token' #The fully-qualified instance name (including region, zone and project ID depending on your project settings) curl -s "http://metadata.google.internal/computeMetadata/v1/instance/hostname" -H "Metadata-Flavor: Google" #Simple hostname curl -s "http://metadata.google.internal/computeMetadata/v1/instance/name" -H "Metadata-Flavor: Google" #Zone instance runs in curl -s "http://metadata.google.internal/computeMetadata/v1/instance/zone" -H "Metadata-Flavor: Google" #Disk image (for prebuilt images provides the OS, version and build date) curl -s "http://metadata.google.internal/computeMetadata/v1/instance/image" -H "Metadata-Flavor: Google" #Machine type curl -s "http://metadata.google.internal/computeMetadata/v1/instance/machine-type" -H "Metadata-Flavor: Google" #CPU platform curl -s "http://metadata.google.internal/computeMetadata/v1/instance/cpu-platform" -H "Metadata-Flavor: Google" #Internal IP curl -s "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip" -H "Metadata-Flavor: Google" #External IP (for instances with external connectivity) curl -s "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip" -H "Metadata-Flavor: Google"