in packages/opentelemetry-resource-util/src/detector/gce.ts [73:90]
export async function availabilityZoneAndRegion(): Promise<{
zone: string;
region: string;
}> {
const fullZone = await metadata.instance<string>(ZONE_METADATA_ATTR);
// Format described in
// https://cloud.google.com/compute/docs/metadata/default-metadata-values#vm_instance_metadata
const re = /projects\/\d+\/zones\/(?<zone>(?<region>\w+-\w+)-\w+)/;
const {zone, region} = fullZone.match(re)?.groups ?? {};
if (!zone || !region) {
throw new Error(
`zone was not in the expected format: projects/PROJECT_NUM/zones/COUNTRY-REGION-ZONE. Got ${fullZone}`
);
}
return {zone, region};
}