Terraform ECS 容量提供程序不會按需生成新的 ECS 實例
從我在這裡讀到的內容, ECS 容量提供者應該(通常)通過將任務置於“Provisioning”狀態並啟動新的 EC2 實例來防止任務立即因資源限製而失敗
這意味著,例如,如果您呼叫 RunTask API 並且由於資源不足(意味著沒有活動實例具有足夠的記憶體、vCPU、埠、ENI 和/或 GPU 來執行任務)而沒有將任務放置在實例上),而不是立即失敗,任務將進入配置狀態(但是請注意,只有在您為容量提供程序啟用託管擴展時才會轉換到配置;否則,找不到容量的任務將立即失敗,就像他們之前所做的那樣)。
我已經設置了一個 ECS 集群,在 terraform 中具有自動縮放組和 ECS 容量提供程序。自動縮放組設置為
min_size = 1
並立即啟動單個實例……所以我相信我的啟動配置很好。但是,當我通過 API 反複呼叫“RunTask”(帶有 的任務
memory=128
)時,我得到的任務無法立即以 reason 啟動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", ] }
看起來這歸結為我在 API 中執行“RunTask”時犯的一個錯誤(在此處記錄)。我已經指定
launchType
而不是capacityProviderStrategy
.從 RunTask 文件:
使用集群 Auto Scaling 時,必須指定
capacityProviderStrategy
而不是launchType
.似乎這樣做的結果是,如果有容量,任務將啟動,但如果容量不足,任務將立即失敗,並且不給自動縮放響應的機會。
我可以通過刪除來讓它工作,
launchType
因為它default_capacity_provider_strategy
是在集群上設置的。