Din cate am citit Aici Furnizorii de capacitate ECS ar trebui (în general) să prevină eșecurile imediate ale sarcinilor în limitele resurselor, punându-le într-o stare de „Aprovizionare” și creând o nouă instanță EC2
Aceasta înseamnă, de exemplu, dacă apelați API-ul RunTask și sarcinile nu sunt plasate pe o instanță din cauza resurselor insuficiente (înseamnă că nicio instanță activă nu avea suficientă memorie, vCPU-uri, porturi, ENIs și/sau GPU-uri pentru a rula sarcini), în loc să eșueze imediat, sarcina va intra în starea de furnizare (rețineți, totuși, că tranziția la aprovizionare are loc numai dacă ați activat scalarea gestionată pentru furnizorul de capacitate; în caz contrar, sarcinile care nu pot găsi capacitatea vor eșua imediat, așa cum au făcut anterior).
Am configurat un cluster ECS, cu grup de autoscaling și furnizor de capacitate ECS în terraform. Grupul de autoscaling este setat cu min_size = 1
și se rotește imediat o singură instanță... așa că sunt sigur că configurația mea de lansare este bună.
Cu toate acestea, când apelez în mod repetat „RunTask” prin API (sarcini cu memorie=128
), primesc sarcini care nu încep imediat cu rațiune RESURSA: MEMORIE
. De asemenea, nu pornesc instanțe noi.
Nu pot să-mi dau seama ce am configurat greșit.
Toate acestea au fost configurate în terraform:
resursă „aws_ecs_cluster” „ecs_cluster” {
nume = local.nume_cluster
setare {
nume = "containerInsights"
valoare = "activat"
}
tags = var.tags
capacity_providers = [aws_ecs_capacity_provider.capacity_provider.name]
# Am adăugat acest lucru în încercarea de a-l face să creeze o nouă instanță
default_capacity_provider_strategy {
capacitate_furnizor = aws_ecs_capacity_provider.capacity_provider.name
}
}
resursă „aws_ecs_capacity_provider” „capacity_provider” {
nume = "${var.tags.PlatformName}-stack-${var.tags.Environment}"
furnizor_grup_auto_scaling_{
auto_scaling_group_arn = aws_autoscaling_group.autoscaling_group.arn
managed_termination_protection = „DEZACTIVAT”
scalare_gestionată {
maximum_scaling_step_size = 4
dimensiunea_pasului_minimum_scaling = 1
stare = "ACTIVAT"
target_capacity = 100
}
}
tags = var.tags
}
#Calcula
resursă „aws_autoscaling_group” „autoscaling_group” {
nume = "${var.tags.PlatformName}-${var.tags.Environment}"
# Dacă nu îl folosim, să nu plătim pentru el
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 = [„Cea mai vecheInstanță”]
vpc_zone_identifier = local.subnets
protect_from_scale_in = false
etichetă {
cheie = „Nume”
valoare = "${var.tags.PlatformName}-${var.tags.Environment}"
propagate_at_launch = adevărat
}
etichetă {
cheie = "AmazonECSMaged"
valoare = ""
propagate_at_launch = adevărat
}
„etichetă” dinamică {
for_each = var.tags
continut {
cheie = tag.cheie
propagate_at_launch = adevărat
valoare = tag.valoare
}
}
enabled_metrics = [
„GroupDesiredCapacity”,
„GroupInServiceInstances”,
„GroupMaxSize”,
„GroupMinSize”,
„GroupPendingInstances”,
„GroupStandbyInstances”,
„GroupTerminatingInstances”,
„GroupTotalInstances”,
]
}