in cloudwatch/cloudwatch.go [677:705]
func (output *OutputPlugin) getECSMetadata() error {
ecsTaskMetadataEndpointV3 := os.Getenv("ECS_CONTAINER_METADATA_URI")
var metadata TaskMetadata
res, err := http.Get(fmt.Sprintf("%s/task", ecsTaskMetadataEndpointV3))
if err != nil {
return fmt.Errorf("Failed to get endpoint response: %w", err)
}
response, err := ioutil.ReadAll(res.Body)
if err != nil {
return fmt.Errorf("Failed to read response '%v' from URL: %w", res, err)
}
res.Body.Close()
err = json.Unmarshal(response, &metadata)
if err != nil {
return fmt.Errorf("Failed to unmarshal ECS metadata '%+v': %w", metadata, err)
}
arnInfo, err := arn.Parse(metadata.TaskARN)
if err != nil {
return fmt.Errorf("Failed to parse ECS TaskARN '%s': %w", metadata.TaskARN, err)
}
resourceID := strings.Split(arnInfo.Resource, "/")
taskID := resourceID[len(resourceID)-1]
metadata.TaskID = taskID
output.ecsMetadata = metadata
return nil
}