in init/fluent_bit_init_process.go [66:117]
func getECSTaskMetadata(httpClient HTTPClient) ECSTaskMetadata {
var metadata ECSTaskMetadata
ecsTaskMetadataEndpointV4 := os.Getenv("ECS_CONTAINER_METADATA_URI_V4")
if ecsTaskMetadataEndpointV4 == "" {
logrus.Warnln("[FluentBit Init Process] Unable to get ECS Metadata, ignore this warning if not running on ECS")
return metadata
}
res, err := httpClient.Get(ecsTaskMetadataEndpointV4 + "/task")
if err != nil {
logrus.Fatalf("[FluentBit Init Process] Failed to get ECS Metadata via HTTP Get: %s\n", err)
}
response, err := ioutil.ReadAll(res.Body)
if err != nil {
logrus.Fatalf("[FluentBit Init Process] Failed to read ECS Metadata from HTTP response: %s\n", err)
}
res.Body.Close()
err = json.Unmarshal(response, &metadata)
if err != nil {
logrus.Fatalf("[FluentBit Init Process] Failed to unmarshal ECS metadata: %s\n", err)
}
taskARN, err := arn.Parse(metadata.ECS_TASK_ARN)
if err != nil {
logrus.Fatalf("[FluentBit Init Process] Failed to parse ECS TaskARN: %s %s\n", metadata.ECS_TASK_ARN, err)
}
resourceID := strings.Split(taskARN.Resource, "/")
taskID := resourceID[len(resourceID)-1]
metadata.ECS_TASK_ID = taskID
metadata.AWS_REGION = taskARN.Region
metadata.ECS_TASK_DEFINITION = metadata.ECS_FAMILY + ":" + metadata.ECS_REVISION
// per ECS task metadata docs, Cluster can be an ARN or the name
if (strings.Contains(metadata.ECS_CLUSTER, "/")) {
clusterARN, err := arn.Parse(metadata.ECS_CLUSTER)
if err != nil {
logrus.Fatalf("[FluentBit Init Process] Failed to parse ECS Cluster ARN: %s %s\n", metadata.ECS_CLUSTER, err)
}
arnSplit := strings.Split(clusterARN.Resource, "/")
clusterName := arnSplit[len(arnSplit)-1]
metadata.ECS_CLUSTER = clusterName
}
// set global ecs metadata region for S3 client
metadataRegion = metadata.AWS_REGION
return metadata
}