func()

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
}