locals {
  name_prefix = "${var.env_prefix}-${var.project_group}-${var.project}"
}

resource "aws_appautoscaling_target" "main" {
  min_capacity       = var.min_capacity
  max_capacity       = var.max_capacity
  resource_id        = var.resource_id
  scalable_dimension = "ecs:service:DesiredCount"
  service_namespace  = "ecs"
}

resource "aws_appautoscaling_policy" "up" {
  name               = "${local.name_prefix}_scale_up"
  policy_type        = "StepScaling"
  resource_id        = var.resource_id
  scalable_dimension = "ecs:service:DesiredCount"
  service_namespace  = "ecs"

  step_scaling_policy_configuration {
    adjustment_type         = "ChangeInCapacity"
    cooldown                = 60
    metric_aggregation_type = "Average"

    step_adjustment {
      metric_interval_lower_bound = 0
      scaling_adjustment          = var.upscaling_adjustment
    }
  }

  depends_on = [
    aws_appautoscaling_target.main,
  ]
}

resource "aws_appautoscaling_policy" "down" {
  name               = "${local.name_prefix}_scale_down"
  policy_type        = "StepScaling"
  resource_id        = var.resource_id
  scalable_dimension = "ecs:service:DesiredCount"
  service_namespace  = "ecs"

  step_scaling_policy_configuration {
    adjustment_type         = "ChangeInCapacity"
    cooldown                = 60
    metric_aggregation_type = "Average"

    step_adjustment {
      metric_interval_upper_bound = 0
      scaling_adjustment          = var.downscaling_adjustment
    }
  }

  depends_on = [
    aws_appautoscaling_target.main,
  ]
}
