Up to five ECS services can be attached to the ALB target group, and since March of this year, the change in attach has eliminated the need to recreate the service. In order to attach a predefined number of blocks load_balancer multiple blocks must be defined, but I will introduce how it can be realized by utilizing Dynamic blocks.
main.tf
module "module" { services = { service1 = { container_name = "serviceA" port = 8881 } service2 = { container_name = "serviceB" port = 8882 } ... } services2 = { service6 = { container_name = "serviceF" port = 8886 } service7 = { container_name = "serviceG" port = 8887 } ... } } We can attach up to five ALB target groups, so you can only define a maximum of five services in a service. Service 2, Service 3... So, I defined as.
alb.tf
resource "aws_alb_target_group" "services" { for_each = merge(var.services, var.services2, ...) name = "${each.key}" port = lookup(each.value, "port") } ecs.tf
resource "aws_ecs_service" "services" { dynamic "load_balancer" { for_each = var.services content { container_name = load_balancer.value["container_name"] container_port = aws_alb_target_group.schools[load_balancer.key].port target_group_arn = aws_alb_target_group.schools[load_balancer.key].arn } } } resource "aws_ecs_service" "services2" { dynamic "load_balancer" { for_each = var.services2 content { container_name = load_balancer.value["container_name"] container_port = aws_alb_target_group.schools[load_balancer.key].port target_group_arn = aws_alb_target_group.schools[load_balancer.key].arn } } } resource "aws_ecs_task_definition" "services" { container_definitions = jsonencode(concat( [ { cpu = 0 disableNetworking = false name = "nginx" } ], [for name, service in var.services : merge( { cpu = 0 disableNetworking = false portMappings = [ { containerPort = aws_alb_target_group.service[name].port hostPort = aws_alb_target_group.service[name].port protocol = "tcp" } ] environment = [ { name = "PORT" value = "${tostring(aws_alb_target_group.services[name].port)}" } ] name = lookup(service, "container_name") }) ]) ) } resource "aws_ecs_task_definition" "services2" { container_definitions = jsonencode(concat( [ { cpu = 0 disableNetworking = false name = "nginx" } ], [for name, service in var.services2 : merge( { cpu = 0 disableNetworking = false portMappings = [ { containerPort = aws_alb_target_group.service[name].port hostPort = aws_alb_target_group.service[name].port protocol = "tcp" } ] environment = [ { name = "PORT" value = "${tostring(aws_alb_target_group.services[name].port)}" } ] name = lookup(service, "container_name") }) ]) ) }
Top comments (0)