# Create a private DNS namespace for service discovery
resource "aws_service_discovery_private_dns_namespace" "main" {
name = "internal.example.com"
description = "Private DNS namespace for ECS services"
vpc = var.vpc_id
}
# Deploy backend service with service discovery
module "backend_service" {
source = "registry.patterneddesigns.ca/patterneddesigns/ecs-service/aws"
version = "2.0.0"
service_name = "backend"
cluster_arn = aws_ecs_cluster.main.arn
task_definition_arn = aws_ecs_task_definition.backend.arn
desired_count = 2
network_configuration = {
subnets = var.private_subnet_ids
security_groups = [aws_security_group.ecs_tasks.id]
assign_public_ip = false
}
service_discovery = {
namespace_id = aws_service_discovery_private_dns_namespace.main.id
dns_name = "backend"
dns_ttl = 10
routing_policy = "MULTIVALUE"
}
}
# Deploy database service accessible via DNS
module "database_service" {
source = "registry.patterneddesigns.ca/patterneddesigns/ecs-service/aws"
version = "2.0.0"
service_name = "redis"
cluster_arn = aws_ecs_cluster.main.arn
task_definition_arn = aws_ecs_task_definition.redis.arn
desired_count = 1
network_configuration = {
subnets = var.private_subnet_ids
security_groups = [aws_security_group.redis.id]
assign_public_ip = false
}
service_discovery = {
namespace_id = aws_service_discovery_private_dns_namespace.main.id
dns_name = "redis"
}
}
# Frontend can now connect to:
# - backend.internal.example.com:8080
# - redis.internal.example.com:6379