Service Discovery

# 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