in aws-xray-recorder-sdk-core/src/main/java/com/amazonaws/xray/plugins/EC2MetadataFetcher.java [62:111]
Map<EC2Metadata, String> fetch() {
String token = fetchToken();
// If token is empty, either IMDSv2 isn't enabled or an unexpected failure happened. We can still get
// data if IMDSv1 is enabled.
String identity = fetchIdentity(token);
if (identity.isEmpty()) {
// If no identity document, assume we are not actually running on EC2.
return Collections.emptyMap();
}
Map<EC2Metadata, String> result = new HashMap<>();
try (JsonParser parser = JSON_FACTORY.createParser(identity)) {
parser.nextToken();
if (!parser.isExpectedStartObjectToken()) {
throw new IOException("Invalid JSON:" + identity);
}
while (parser.nextToken() != JsonToken.END_OBJECT) {
String value = parser.nextTextValue();
switch (parser.getCurrentName()) {
case "instanceId":
result.put(EC2Metadata.INSTANCE_ID, value);
break;
case "availabilityZone":
result.put(EC2Metadata.AVAILABILITY_ZONE, value);
break;
case "instanceType":
result.put(EC2Metadata.INSTANCE_TYPE, value);
break;
case "imageId":
result.put(EC2Metadata.AMI_ID, value);
break;
default:
parser.skipChildren();
}
if (result.size() == EC2Metadata.values().length) {
return Collections.unmodifiableMap(result);
}
}
} catch (IOException e) {
logger.warn("Could not parse identity document.", e);
return Collections.emptyMap();
}
// Getting here means the document didn't have all the metadata fields we wanted.
logger.warn("Identity document missing metadata: " + identity);
return Collections.unmodifiableMap(result);
}