Поставщик мощностей Terraform ECS не приводит к появлению новых экземпляров ECS по требованию

Поставщик мощностей Terraform ECS не приводит к появлению новых экземпляров ECS по требованию

Из того, что я прочиталздесьПоставщики ресурсов ECS должны (как правило) предотвращать немедленный сбой задач из-за ограничений ресурсов, переводя их в состояние «Выделение ресурсов» и запуская новый экземпляр EC2.

Это означает, например, что если вы вызываете API RunTask, а задачи не размещаются на экземпляре из-за нехватки ресурсов (то есть ни у одного активного экземпляра нет достаточного объема памяти, виртуальных ЦП, портов, ENI и/или графических процессоров для запуска задач),вместо немедленного сбоя задача перейдет в состояние подготовки(Однако следует отметить, что переход к выделению ресурсов происходит только в том случае, если вы включили управляемое масштабирование для поставщика емкости; в противном случае задачи, которые не могут найти емкость, будут немедленно завершаться ошибкой, как это было ранее).

Я настроил кластер ECS с группой автомасштабирования и поставщиком емкости ECS в terraform. Группа автомасштабирования настроена, min_size = 1и она немедленно запускает один экземпляр... поэтому я уверен, что моя конфигурация запуска в порядке.

Однако, когда я многократно вызываю "RunTask" через API (задачи с memory=128), я получаю задачи, которые не запускаются немедленно по причине RESOURCE:MEMORY. Также не запускаются новые экземпляры.

Я не могу понять, что я неправильно настроил.


Все это было настроено в 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",
  ]
}

решение1

Похоже, это произошло из-за ошибки, которую я допустил при выполнении «RunTask» в API (задокументировано здесь). Я указал launchTypeи не capacityProviderStrategy.

Из документации RunTask:

При использовании автоматического масштабирования кластера необходимо указать capacityProviderStrategy, а не launchType.

Похоже, в результате этого задачи запускаются при наличии ресурсов, но немедленно завершаются сбоем при их недостатке, не давая возможности автоматическому масштабированию отреагировать.

Мне удалось заставить его работать, просто удалив, launchTypeпотому что default_capacity_provider_strategyон был установлен на кластере.

Связанный контент