コメントで教えていただいた。
$ curl -s -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/zone
projects/XXXXXXXXXXX/zones/asia-east1-b
hostがmetadata.googl.internal
になっているのがミソっぽい。
Compute Engine API側になくて全然気づかなかった。
asia-east1-bだけ欲しいならbasename
を使うのがよさそう。
$ basename $(curl -s -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/zone)
asia-east1-b
蛇足
jqが使えるなら一括で取得しておいて使いまわすのもよいかもしれない。
$ METADATA=$(curl -s -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/?recursive=true&alt=json")
$ echo $METADATA | jq '.instance.zone'
"projects/XXXXXXXXXXXXX/zones/asia-east1-b"
$ basename $(echo $METADATA | jq -r '.instance.zone')
asia-east1-b
メタデータをザクっと確認するなら
$ curl -s -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMeta
data/v1/?recursive=true&alt=text"
とするのがよさそう。
たとえばinstance/disks/1/device-name
のデータがとりたいなら
$ echo $METADATA | jq '.instance.disks[1].deviceName'
で取得できる。pathの変換が必要なのでいい感じに取得する方法がないか悩ましい。