locals {
  name        = "${var.env_prefix}-${var.project_group}-${var.project}"
  name_prefix = "${var.env_prefix}-${var.project_group}"

  port_mapping = [for port in var.container_ports :
    {
      hostPort      = port,
      protocol      = "tcp",
      containerPort = port,
    }
  ]
  cw_log_group_name = var.cw_log_group_name != "" ? var.cw_log_group_name : "/ecs/${local.name}"
}

resource "aws_cloudwatch_log_group" "this" {
  name = local.cw_log_group_name
  tags = var.common_tags
}

resource "aws_ecs_task_definition" "this" {
  family                   = var.task_family
  task_role_arn            = var.task_role_arn
  execution_role_arn       = var.task_exec_role_arn
  network_mode             = "awsvpc"
  requires_compatibilities = ["FARGATE"]
  cpu                      = var.cpu
  memory                   = var.memory
  tags                     = var.common_tags

  container_definitions = templatefile(
    "${path.module}/${var.containers_template}",
    {
      region         = var.region
      log_group      = aws_cloudwatch_log_group.this.name
      container_name = var.project
      docker_image   = var.image
      secrets        = var.secrets
      port_mapping   = jsonencode(local.port_mapping)
      env_vars       = jsonencode(var.env_vars)
      extra_hosts    = "null"
    }
  )

  lifecycle {
    create_before_destroy = true
  }
}
