Auto-Scaling

# Deploy ECS service with CPU-based auto-scaling
module "scalable_service" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ecs-service/aws"
  version = "2.0.0"

  service_name        = "worker-service"
  cluster_arn         = aws_ecs_cluster.main.arn
  task_definition_arn = aws_ecs_task_definition.worker.arn
  desired_count       = 2

  network_configuration = {
    subnets          = var.private_subnet_ids
    security_groups  = [aws_security_group.ecs_tasks.id]
    assign_public_ip = false
  }

  autoscaling = {
    min_capacity       = 2
    max_capacity       = 10
    target_cpu_percent = 70
  }
}

# Deploy ECS service with memory-based auto-scaling
module "memory_scaled_service" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ecs-service/aws"
  version = "2.0.0"

  service_name        = "cache-service"
  cluster_arn         = aws_ecs_cluster.main.arn
  task_definition_arn = aws_ecs_task_definition.cache.arn
  desired_count       = 3

  network_configuration = {
    subnets          = var.private_subnet_ids
    security_groups  = [aws_security_group.ecs_tasks.id]
    assign_public_ip = false
  }

  autoscaling = {
    min_capacity          = 3
    max_capacity          = 20
    target_memory_percent = 80
  }
}

# Deploy ECS service with request count scaling (ALB)
module "request_scaled_service" {
  source  = "registry.patterneddesigns.ca/patterneddesigns/ecs-service/aws"
  version = "2.0.0"

  service_name        = "api-service"
  cluster_arn         = aws_ecs_cluster.main.arn
  task_definition_arn = aws_ecs_task_definition.api.arn
  desired_count       = 2

  load_balancer = {
    target_group_arn = aws_lb_target_group.api.arn
    container_name   = "api"
    container_port   = 8080
  }

  network_configuration = {
    subnets          = var.private_subnet_ids
    security_groups  = [aws_security_group.ecs_tasks.id]
    assign_public_ip = false
  }

  autoscaling = {
    min_capacity                  = 2
    max_capacity                  = 50
    target_requests_per_target    = 1000
    scale_in_cooldown             = 300
    scale_out_cooldown            = 60
  }
}