จากที่อ่านมา ที่นี่ ผู้ให้บริการความจุ ECS ควร (โดยทั่วไป) ป้องกันไม่ให้งานล้มเหลวในทันทีเนื่องจากทรัพยากรจำกัดโดยกำหนดให้อยู่ในสถานะ "การจัดเตรียม" และหมุนอินสแตนซ์ EC2 ใหม่
ซึ่งหมายความว่า ตัวอย่างเช่น หากคุณเรียกใช้ RunTask API และงานไม่ถูกนำไปวางบนอินสแตนซ์เนื่องจากทรัพยากรไม่เพียงพอ (หมายความว่าไม่มีอินสแตนซ์ที่ใช้งานอยู่ที่มีหน่วยความจำ, vCPU, พอร์ต, ENI และ/หรือ GPU เพียงพอที่จะเรียกใช้ งาน) แทนที่จะล้มเหลวทันที งานจะเข้าสู่สถานะการเตรียมใช้งาน (อย่างไรก็ตาม โปรดทราบว่าการเปลี่ยนไปใช้การจัดสรรจะเกิดขึ้นก็ต่อเมื่อคุณเปิดใช้งานการปรับขนาดที่มีการจัดการสำหรับผู้ให้บริการความจุ มิฉะนั้น งานที่ไม่สามารถค้นหาความจุจะล้มเหลวทันทีเหมือนที่เคยทำมา)
ฉันได้ตั้งค่าคลัสเตอร์ ECS พร้อมกลุ่มการปรับขนาดอัตโนมัติและผู้ให้บริการความจุ ECS ในรูปแบบดินเผา มีการตั้งค่ากลุ่มการปรับขนาดอัตโนมัติด้วย min_size = 1
และมันก็หมุนอินสแตนซ์เดียวทันที... ดังนั้นฉันจึงมั่นใจว่าการกำหนดค่าการเปิดใช้งานของฉันนั้นใช้ได้
อย่างไรก็ตามเมื่อฉันเรียก "RunTask" ซ้ำๆ ผ่าน API (งานที่มี หน่วยความจำ=128
) ฉันได้รับงานที่ไม่สามารถเริ่มได้ทันทีโดยมีเหตุผล ทรัพยากร: หน่วยความจำ
. ยังไม่มีอินสแตนซ์ใหม่เริ่มต้นขึ้น
ฉันไม่สามารถทราบได้ว่าฉันกำหนดค่าอะไรผิด
นี่คือการตั้งค่าทั้งหมดใน Terraform:
ทรัพยากร "aws_ecs_cluster" "ecs_cluster" {
ชื่อ = local.cluster_name
การตั้งค่า {
ชื่อ = "containerInsights"
ค่า = "เปิดใช้งาน"
}
แท็ก = var.tags
capacity_providers = [aws_ecs_capacity_provider.capacity_provider.name]
# ฉันเพิ่มสิ่งนี้เพื่อพยายามทำให้มันหมุนอินสแตนซ์ใหม่
default_capacity_provider_strategy {
capacity_provider = aws_ecs_capacity_provider.capacity_provider.name
}
}
ทรัพยากร "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 = "ปิดใช้งาน"
Manage_scaling {
maximum_scaling_step_size = 4
ขั้นต่ำ_scaling_step_size = 1
สถานะ = "เปิดใช้งาน"
target_capacity = 100
}
}
แท็ก = var.tags
}
#คำนวณ
ทรัพยากร "aws_autoscaling_group" "autoscaling_group" {
name = "${var.tags.PlatformName}-${var.tags.Environment}"
#ใช้ไม่เป็นก็อย่าจ่าย
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 = ["อินสแตนซ์ที่เก่าที่สุด"]
vpc_zone_identifier = local.subnets
protect_from_scale_in = เท็จ
แท็ก {
คีย์ = "ชื่อ"
ค่า = "${var.tags.PlatformName}-${var.tags.Environment}"
propagate_at_launch = จริง
}
แท็ก {
คีย์ = "AmazonECSManaged"
ค่า = ""
propagate_at_launch = จริง
}
"แท็ก" แบบไดนามิก {
for_each = var.แท็ก
เนื้อหา {
คีย์ = tag.key
propagate_at_launch = จริง
ค่า = tag.value
}
}
enable_metrics = [
"GroupDesiredCapacity",
"GroupInServiceInstance",
"กรุ๊ปแม็กซ์ไซส์",
"กลุ่มขั้นต่ำขนาด",
"อินสแตนซ์ GroupPending",
"กลุ่มสแตนด์บายอินสแตนซ์",
"อินสแตนซ์ GroupTerminating",
"GroupTotalInstances",
]
}