Terraform ECS 容量提供者不會按需產生新的 ECS 實例

Terraform ECS 容量提供者不會按需產生新的 ECS 實例

從我讀到的這裡ECS 容量提供者(通常)應將任務置於「配置」狀態並啟動新的 EC2 實例,以防止任務立即因資源限製而失敗

這意味著,例如,如果您調用 RunTask API,並且由於資源不足(意味著沒有活動實例有足夠的內存、vCPU、端口、ENI 和/或 GPU 來運行任務,因此任務不會放置在實例上) ) ,該任務不會立即失敗,而是進入配置狀態(但請注意,只有在您為容量提供者啟用了託管擴充時,才會發生向配置的轉換;否則,找不到容量的任務將立即失敗,就像以前一樣)。

我已經在 terraform 中設定了一個 ECS 集群,其中包含自動縮放組和 ECS 容量提供者。自動縮放群組設定完畢後min_size = 1,它會立即啟動一個實例...所以我確信我的啟動配置沒問題。

但是,當我透過 API 重複呼叫「RunTask」(帶有 的任務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

看起來這是我在 API 中執行「RunTask」時犯的一個錯誤(記錄在這裡)。我已經指定了launchType,但沒有指定capacityProviderStrategy

來自運行任務文檔:

使用群集彈性伸縮時,必須指定capacityProviderStrategy且不指定launchType

這樣做的結果似乎是,如果有容量,任務就會啟動,但如果容量不足,任務就會立即失敗,並且不給自動伸縮回應的機會。

我只需通過刪除即可使其工作,launchType因為default_capacity_provider_strategy是在叢集上設置的。

相關內容