modules/accelerator/ecs/ecs.tf (78 lines of code) (raw):

resource "aws_ecs_cluster" "ecs_cluster" { name = "${var.repo_name}-${var.region_name}-ecs" setting { name = "containerInsights" value = "enabled" } configuration { execute_command_configuration { kms_key_id = var.aws_kms_key logging = "OVERRIDE" log_configuration { cloud_watch_encryption_enabled = true cloud_watch_log_group_name = aws_cloudwatch_log_group.logs_group.name } } } } resource "aws_ecs_cluster_capacity_providers" "example" { cluster_name = aws_ecs_cluster.ecs_cluster.name capacity_providers = ["FARGATE"] } resource "aws_cloudwatch_log_group" "logs_group" { name = "${var.repo_name}-${var.region_name}-ecs" retention_in_days = 7 kms_key_id = var.aws_kms_key_arn } resource "aws_ecs_service" "app_ecs_service" { count = length(var.environments) name = "${var.repo_name}-${var.region_name}-ecs-${var.environments[count.index]}" cluster = aws_ecs_cluster.ecs_cluster.id task_definition = aws_ecs_task_definition.ecs-task-definition[count.index].arn desired_count = var.desired_capacity[count.index] launch_type = "FARGATE" deployment_controller { type = "CODE_DEPLOY" } network_configuration { security_groups = var.security_groups subnets = var.private_subnet_ids assign_public_ip = false } load_balancer { container_name = var.container_name container_port = var.docker_container_port target_group_arn = var.target_group_blue_arn[count.index] } lifecycle { ignore_changes = [ load_balancer, desired_count, task_definition ] } } # Task Definition for application to create initial infrastructure data "template_file" "ecs_task_definition_template" { count = length(var.environments) template = replace(file("${path.module}/task_definition_default.json"), "\"$${target_port}\"", "$${target_port}") vars = { container_name = var.container_name task_definition_name = "${var.repo_name}-${var.region_name}-ecs" region = var.region logs_group = aws_cloudwatch_log_group.logs_group.id env = var.environments[count.index] target_port = var.docker_container_port image = "${var.aws_account_id}.dkr.ecr.${var.region}.amazonaws.com/${aws_ecr_repository.ecr-repo.name}:latest" } } resource "aws_ecs_task_definition" "ecs-task-definition" { count = length(var.environments) container_definitions = data.template_file.ecs_task_definition_template[count.index].rendered family = "${var.repo_name}-${var.region_name}-ecs-${var.environments[count.index]}" cpu = var.cpu memory = var.memory requires_compatibilities = ["FARGATE"] network_mode = "awsvpc" execution_role_arn = var.execution_role task_role_arn = var.task_role }