El proveedor de capacidad Terraform ECS no genera nuevas instancias de ECS bajo demanda

El proveedor de capacidad Terraform ECS no genera nuevas instancias de ECS bajo demanda

Por lo que leíaquíLos proveedores de capacidad de ECS deberían (generalmente) evitar que las tareas fallen inmediatamente debido a los límites de recursos colocándolas en un estado de "Aprovisionamiento" y activando una nueva instancia EC2.

Esto significa, por ejemplo, si llama a la API RunTask y las tareas no se colocan en una instancia debido a recursos insuficientes (lo que significa que ninguna instancia activa tenía suficiente memoria, vCPU, puertos, ENI y/o GPU para ejecutar las tareas). ),en lugar de fallar inmediatamente, la tarea pasará al estado de aprovisionamiento(tenga en cuenta, sin embargo, que la transición al aprovisionamiento solo ocurre si ha habilitado el escalado administrado para el proveedor de capacidad; de lo contrario, las tareas que no puedan encontrar capacidad fallarán inmediatamente, como lo hicieron anteriormente).

Configuré un clúster ECS, con un grupo de escalado automático y un proveedor de capacidad ECS en terraform. El grupo de escalado automático está configurado min_size = 1e inmediatamente activa una sola instancia... así que estoy seguro de que mi configuración de lanzamiento está bien.

Sin embargo, cuando llamo repetidamente a "RunTask" a través de la API (tareas con memory=128), obtengo tareas que no se inician inmediatamente con un motivo RESOURCE:MEMORY. Además, no se inician nuevas instancias.

No puedo entender qué he configurado mal.


Todo esto fue configurado en terraform:

resource "aws_ecs_cluster" "ecs_cluster" {
  name = local.cluster_name


  setting {
    name  = "containerInsights"
    value = "enabled"
  }
  tags = var.tags
  capacity_providers = [aws_ecs_capacity_provider.capacity_provider.name]

  # I added this in an attempt to make it spin up new instance 
  default_capacity_provider_strategy {
    capacity_provider = aws_ecs_capacity_provider.capacity_provider.name
  }

}

resource "aws_ecs_capacity_provider" "capacity_provider" {
  name = "${var.tags.PlatformName}-stack-${var.tags.Environment}"

  auto_scaling_group_provider {
    auto_scaling_group_arn         = aws_autoscaling_group.autoscaling_group.arn
    managed_termination_protection = "DISABLED"

    managed_scaling {
      maximum_scaling_step_size = 4
      minimum_scaling_step_size = 1
      status                    = "ENABLED"
      target_capacity           = 100
    }
  }

  tags = var.tags
}

#Compute
resource "aws_autoscaling_group" "autoscaling_group" {
  name                      = "${var.tags.PlatformName}-${var.tags.Environment}"
  # If we're not using it, lets not pay for it
  min_size                  = "1"
  max_size                  = var.ecs_max_size
  launch_configuration      = aws_launch_configuration.launch_config.name
  health_check_grace_period = 60
  default_cooldown          = 30
  termination_policies      = ["OldestInstance"]
  vpc_zone_identifier       = local.subnets
  protect_from_scale_in     = false

  tag {
    key                 = "Name"
    value               = "${var.tags.PlatformName}-${var.tags.Environment}"
    propagate_at_launch = true
  }

  tag {
    key                 = "AmazonECSManaged"
    value               = ""
    propagate_at_launch = true
  }

  dynamic "tag" {
    for_each = var.tags
    content {
      key = tag.key
      propagate_at_launch = true
      value = tag.value
    }
  }

  enabled_metrics = [
    "GroupDesiredCapacity",
    "GroupInServiceInstances",
    "GroupMaxSize",
    "GroupMinSize",
    "GroupPendingInstances",
    "GroupStandbyInstances",
    "GroupTerminatingInstances",
    "GroupTotalInstances",
  ]
}

Respuesta1

Se ve así debido a un error que cometí al ejecutar "RunTask" en la API (documentado aquí). Lo había especificado launchTypey no capacityProviderStrategy.

De la documentación de RunTask:

Cuando utiliza el escalado automático de clústeres, debe especificar capacityProviderStrategyy no launchType.

Parece que el resultado de esto es que las tareas se iniciarán si hay capacidad, pero fallarán inmediatamente si no hay capacidad suficiente y no darán al escalado automático la oportunidad de responder.

Pude hacer que funcionara simplemente eliminándolo launchTypeporque default_capacity_provider_strategyestaba configurado en el clúster.

información relacionada