Terraform ECS Capacity Provider führt nicht zu neuen ECS-Instanzen auf Anfrage

Terraform ECS Capacity Provider führt nicht zu neuen ECS-Instanzen auf Anfrage

Von dem, was ich gelesen habeHierECS-Kapazitätsanbieter sollten (im Allgemeinen) verhindern, dass Aufgaben sofort an Ressourcengrenzen scheitern, indem sie sie in den Status „Provisioning“ versetzen und eine neue EC2-Instanz starten.

Dies bedeutet beispielsweise, dass, wenn Sie die RunTask-API aufrufen und die Aufgaben aufgrund unzureichender Ressourcen nicht auf einer Instanz platziert werden (d. h. keine aktive Instanz verfügte über ausreichend Speicher, vCPUs, Ports, ENIs und/oder GPUs, um die Aufgaben auszuführen),Anstatt sofort zu scheitern, wechselt die Aufgabe in den Bereitstellungsstatus(Beachten Sie jedoch, dass der Übergang zur Bereitstellung nur erfolgt, wenn Sie die verwaltete Skalierung für den Kapazitätsanbieter aktiviert haben. Andernfalls schlagen Aufgaben, die keine Kapazität finden können, sofort fehl, wie dies zuvor der Fall war.)

Ich habe einen ECS-Cluster mit Autoscaling-Gruppe und ECS-Kapazitätsanbieter in Terraform eingerichtet. Die Autoscaling-Gruppe ist eingerichtet min_size = 1und startet sofort eine einzelne Instanz. Ich bin also zuversichtlich, dass meine Startkonfiguration in Ordnung ist.

Wenn ich jedoch „RunTask“ wiederholt über die API aufrufe (Aufgaben mit memory=128), werden die Aufgaben mit der Begründung nicht sofort gestartet RESOURCE:MEMORY. Außerdem werden keine neuen Instanzen gestartet.

Ich kann nicht herausfinden, was ich falsch konfiguriert habe.


Dies wurde alles in Terraform eingerichtet:

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",
  ]
}

Antwort1

Es sieht so aus, als ob dies auf einen Fehler zurückzuführen ist, den ich bei der Ausführung von "RunTask" in der API gemacht habe (hier dokumentiert). Ich hatte angegeben launchTypeund nicht capacityProviderStrategy.

Aus der RunTask-Dokumentation:

Wenn Sie Cluster Auto Scaling verwenden, müssen Sie capacityProviderStrategyund nicht angeben launchType.

Dies scheint zur Folge zu haben, dass Aufgaben zwar gestartet werden, wenn die Kapazität vorhanden ist, bei unzureichender Kapazität jedoch sofort fehlschlagen und der automatischen Skalierung keine Chance gegeben wird, zu reagieren.

Ich konnte es einfach durch Löschen zum Laufen bringen, launchTypeda default_capacity_provider_strategyes im Cluster festgelegt war.

verwandte Informationen