Open janaka opened 4 years ago
# Define the ECS task definition (if not already defined)
resource "aws_ecs_task_definition" "example" {
family = "my-ecs-service"
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
execution_role_arn = aws_iam_role.ecs_execution_role.arn
# Define container definitions, network configurations, etc.
# ...
}
# Define the ECS service (if not already defined)
resource "aws_ecs_service" "example" {
name = "my-ecs-service"
cluster = aws_ecs_cluster.example.id
task_definition = aws_ecs_task_definition.example.arn
launch_type = "FARGATE"
# Define desired count, IAM roles, security groups, etc.
# ...
}
# Define the ALB target group
resource "aws_lb_target_group" "example" {
name = "my-target-group"
port = 80
protocol = "HTTP"
vpc_id = aws_vpc.example.id
# Additional target group settings (health checks, stickiness, etc.)
# ...
}
# Attach the ALB target group to the ECS service
resource "aws_lb_target_group_attachment" "example" {
target_group_arn = aws_lb_target_group.example.arn
target_id = aws_ecs_service.example.name
port = 80
}
# Output the ALB DNS name (for reference)
output "alb_dns_name" {
value = aws_lb.example.dns_name
}
# Define the ECS task definition (if not already defined) resource "aws_ecs_task_definition" "example" { family = "my-ecs-service" network_mode = "awsvpc" requires_compatibilities = ["FARGATE"] execution_role_arn = aws_iam_role.ecs_execution_role.arn # Define container definitions, network configurations, etc. # ... } # Define the ECS service (if not already defined) resource "aws_ecs_service" "example" { name = "my-ecs-service" cluster = aws_ecs_cluster.example.id task_definition = aws_ecs_task_definition.example.arn launch_type = "FARGATE" # Define desired count, IAM roles, security groups, etc. # ... } # Define the ALB target group resource "aws_lb_target_group" "example" { name = "my-target-group" port = 80 protocol = "HTTP" vpc_id = aws_vpc.example.id # Additional target group settings (health checks, stickiness, etc.) # ... } # Attach the ALB target group to the ECS service resource "aws_lb_target_group_attachment" "example" { target_group_arn = aws_lb_target_group.example.arn target_id = aws_ecs_service.example.name port = 80 } # Output the ALB DNS name (for reference) output "alb_dns_name" { value = aws_lb.example.dns_name }
This doesn't work. Error:
│ Error: registering targets with target group: ValidationError: Instance ID 'my-ecs-service' is not valid
│ status code: 400, request id: bfxxxx54-xxxx-xxxx-xxxx-2fxxxxxxxxxxxx
│
│ with module.alb_target_group.aws_lb_target_group_attachment.main,
│ on ../../modules/alb_target_group/main.tf line 27, in resource "aws_lb_target_group_attachment" "main":
│ 27: resource "aws_lb_target_group_attachment" "main" {
│
Fargate containers don't seem to have the Container instance ID
field populated.
Much needed addition!
Community Note
Description
Enable attached an ALB / target group to an already created ECS Fargate service
New or Affected Resource(s)
Potential Terraform Configuration
References
https://discuss.hashicorp.com/t/modularising-ecs-service-creation-with-optional-alb/8740
0000