
내가 읽은 것에서여기ECS 용량 공급자는 일반적으로 작업을 "프로비저닝" 상태로 전환하고 새 EC2 인스턴스를 가동하여 리소스 제한으로 인해 작업이 즉시 실패하는 것을 방지해야 합니다.
예를 들어 RunTask API를 호출했는데 리소스 부족으로 인해 작업이 인스턴스에 배치되지 않는 경우(즉, 작업을 실행하는 데 충분한 메모리, vCPU, 포트, ENI 및/또는 GPU가 있는 활성 인스턴스가 없음을 의미) ),즉시 실패하는 대신 작업이 프로비저닝 상태로 전환됩니다.(그러나 프로비저닝으로의 전환은 용량 공급자에 대해 관리형 조정을 활성화한 경우에만 발생합니다. 그렇지 않으면 이전과 마찬가지로 용량을 찾을 수 없는 작업이 즉시 실패합니다.)
Terraform의 Auto Scaling 그룹과 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
.
RunTask 문서에서:
클러스터 Auto Scaling을 사용하는 경우
capacityProviderStrategy
및 not을 지정해야 합니다launchType
.
그 결과 용량이 있으면 작업이 시작되지만 용량이 부족하면 즉시 실패하고 Auto Scaling에 응답할 기회를 주지 않는 것 같습니다.
클러스터에 설정되어 있기 launchType
때문에 삭제만으로 작동하게 할 수 있었습니다 .default_capacity_provider_strategy