resource "aws_ecs_task_definition" "ecs_task" {
# ignoring other field irrelevant to logs in this example
container_definitions = jsonencode([
{
name = var.name
image = var.container_image
essential = true
environment = [
{
name = "DD_VERSION"
value = "1.0.0"
},
{
name = "DD_ENV",
value = "prod"
},
{
name = "DD_SERVICE"
value = var.name
},
# specify other env vars here
],
logConfiguration = {
logDriver = "awsfirelens"
options = {
"Name" = "datadog",
"Host" = "http-intake.logs.datadoghq.eu",
"TLS" = "on",
"dd_source" = var.name,
"provider" = "ecs",
"dd_service" = var.name,
"apikey" = var.datadog_api_key
}
}
dependsOn = [
{ "containerName" : "log_router", "condition" : "START" },
{ "condition" = "HEALTHY", "containerName" = "datadog-agent" }
]
},
{
name = "log_router"
image = "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable"
memoryReservation = 50,
firelensConfiguration = {
"type" = "fluentbit",
"options" = {
"enable-ecs-log-metadata" = "true"
}
},
},
{
name = "datadog-agent",
image = "public.ecr.aws/datadog/agent:latest",
portMappings = [
{
"containerPort" = 8126,
"hostPort" = 8126,
"protocol" = "tcp"
}
{
# We need this for metrics
"containerPort" = 4317,
"hostPort" = 4317,
"protocol" = "tcp"
}
],
environment = [{
"name" = "ECS_FARGATE",
"value" = "true"
},
{
"name" = "DD_APM_ENABLED",
"value" = "true"
},
{
"name" = "DD_LOGS_ENABLED",
"value" = "true"
},
{
"name" = "DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL",
"value" = "true"
},
{
"name" = "DD_APM_NON_LOCAL_TRAFFIC",
"value" = "true"
},
{
"name" = "DD_API_KEY",
"value" = var.datadog_api_key
},
{
"name" = "DD_SITE",
"value" = "datadoghq.eu"
}]
}
])
}