Automatisch schalen en load balancing van ECS-services
Koppel een ALB aan ECS-services voor routering op basis van paden en configureer automatisch schalen van services op basis van CPU-gebruik of aangepaste CloudWatch-metrics.
Automatisch schalen en load balancing van ECS-services is een gratis AWS Solutions Architect-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject AWS Solutions Architect. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus AWS Solutions Architect bevat in totaal 4 lessen.
De noodzaak van automatisch schalen van ECS-services
Een vaste gewenste telling voor een ECS-service kan niet reageren op schommelingen in het verkeer: je voorziet óf te veel capaciteit (waardoor je geld verspilt), óf te weinig (waardoor de prestaties achteruitgaan). Automatisch schalen van ECS-services past de gewenste taakentelling automatisch aan op basis van CloudWatch-metrieken. Onder de motorkap gebruikt dit de service Application Auto Scaling, hetzelfde raamwerk dat wordt gebruikt door DynamoDB, Aurora en ElastiCache. Automatisch schalen van ECS-services ondersteunt beleid voor doeltracking, stapsgewijs schalen en gepland schalen.
ECS registreren als schaalbaar doel
Voordat je schaalbeleid toevoegt, registreer je de ECS-service als een schaalbaar doel in Application Auto Scaling. Geef de minimale en maximale taakentelling op, evenals de clusternaam en de servicenaam als resource-id. Hiermee maak je de grenzen waarbinnen automatisch schalen werkt. De minimale telling zorgt ervoor dat je altijd basiscapaciteit hebt; de maximale telling voorkomt dat onbeperkt schalen de Fargate-capaciteit of EC2-instanties uitput.
aws application-autoscaling register-scalable-target \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id 'service/MyAppCluster/MyAppService' \
--min-capacity 2 \
--max-capacity 20Doeltracking voor ECS-services
Doeltracking is voor de meeste ECS-services het aanbevolen beleid voor automatisch schalen. De meest gebruikte doelmetriek is ECSServiceAverageCPUUtilization: stel een doel van 50-70% in, waarna ECS taken toevoegt of verwijdert om dat CPU-niveau te handhaven. Een andere krachtige metriek is ALBRequestCountPerTarget: houd het aantal ALB-verzoeken per taak bij en schaal om een doelverwerkingssnelheid per instantie te handhaven. AWS handelt het opschalen en afschalen automatisch af, met geschikte afkoelperioden.
aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id 'service/MyAppCluster/MyAppService' \
--policy-name 'ECSTargetTracking' \
--policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ECSServiceAverageCPUUtilization"
},
"TargetValue": 60.0,
"ScaleOutCooldown": 60,
"ScaleInCooldown": 300
}'ALB-routering naar ECS-services
Als je een Application Load Balancer (ALB) aan een ECS-service koppelt, wordt HTTP/HTTPS-verkeer verdeeld over alle actieve taken. De doelgroep van de ALB registreert het IP-adres van elke taak (voor Fargate/awsvpc) of de containerpoort (voor de bridge-modus). ECS registreert nieuwe taken automatisch bij de doelgroep zodra ze starten en verwijdert ze zodra ze stoppen. De ALB voert gezondheidscontroles uit op elke taak; ongezonde taken worden leeggemaakt (verbindingen worden netjes gesloten) voordat de service ze beëindigt.
Routering op basis van paden voor meerdere services
Een krachtig patroon is om verschillende URL-paden naar verschillende ECS-services te routeren met ALB-routering op basis van paden. Eén ALB met één HTTPS-listener kan als volgt routeren: /api/orders/* naar de ECS-service Orders, /api/users/* naar de ECS-service Users en /api/products/* naar de ECS-service Products. Elke service wordt ondersteund door een eigen ECS-service met onafhankelijk schalen. Hierdoor zijn afzonderlijke load balancers per microservice niet nodig, wat kosten verlaagt en DNS-beheer vereenvoudigt.
# ALB listener rule for ECS microservice routing
aws elbv2 create-rule \
--listener-arn 'arn:aws:elasticloadbalancing:...' \
--priority 10 \
--conditions '[{"Field": "path-pattern", "Values": ["/api/orders/*"]}]' \
--actions '[{"Type": "forward", "TargetGroupArn": "arn:...OrdersTargetGroup"}]'Verbindingen leegmaken en registratievertraging opheffen
Wanneer een ECS-taak wordt beëindigd (tijdens het afschalen of een implementatie), markeert de ALB deze als wordt leeggemaakt en stuurt hij er geen nieuwe verzoeken meer naartoe, terwijl lopende verzoeken kunnen worden voltooid. De vertraging voor het opheffen van de registratie (standaard 300 seconden, configureerbaar van 0 tot 3600 seconden) bepaalt hoelang de ALB wacht voordat hij verbindingen geforceerd sluit. Voor ECS met korte verzoekduur stel je een lagere vertraging voor het opheffen van de registratie in (30-60 seconden) om implementaties en afschaalbewerkingen te versnellen. Voor langdurige verbindingen (WebSocket, bestandsuploads) houd je een hogere vertraging aan.
# Set deregistration delay on target group to 60 seconds
aws elbv2 modify-target-group-attributes \
--target-group-arn 'arn:aws:elasticloadbalancing:...' \
--attributes 'Key=deregistration_delay.timeout_seconds,Value=60'Aangepaste metrieken voor schalen van ECS
Naast CPU en geheugen kun je vanuit je toepassing aangepaste CloudWatch-metrieken publiceren (wachtrijdiepte, actieve sessies, zakelijke KPI's) en deze gebruiken om het schalen aan te sturen. Als elke ECS-taak bijvoorbeeld gelijktijdig 50 wachtrijberichten kan verwerken, publiceer je de diepte van de SQS-wachtrij als aangepaste metriek en maak je een doeltrackingbeleid met als doel 50 berichten per taak. Zo ontstaat schalen dat rechtstreeks door bedrijfslogica wordt aangestuurd, in plaats van door infrastructuurmetrieken die mogelijk geen verband houden met de belasting van de toepassing.
aws application-autoscaling put-scaling-policy \
--policy-name 'QueueDepthScaling' \
--policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{
"CustomizedMetricSpecification": {
"MetricName": "QueueDepth",
"Namespace": "MyApp",
"Statistic": "Average"
},
"TargetValue": 50.0
}' \
--resource-id 'service/MyCluster/WorkerService' \
--scalable-dimension ecs:service:DesiredCount \
--service-namespace ecsBescherming tegen afschalen van taken
Net als EC2 Auto Scaling ondersteunt ECS bescherming tegen het afschalen van taken. Een actieve taak kan via de ECS API zelf een vlag voor bescherming tegen afschalen instellen, zodat de taak tijdens het afschalen niet wordt beëindigd terwijl deze een kritieke taak verwerkt. Dit is nuttig voor ECS-taken die als SQS-werknemers fungeren: een werknemer die net een langdurige taak uit de wachtrij heeft gehaald, kan zichzelf beschermen, de taak voltooien en daarna de bescherming opheffen. Zonder deze bescherming kan het afschalen een taak die halverwege de verwerking is beëindigen, wat dubbele taken of gegevensverlies kan veroorzaken.
# From inside the ECS task container
curl -X PUT 'http://169.254.170.2/v3/tasks/scale-in-protection' \
-H 'Content-Type: application/json' \
-d '{"ProtectionEnabled": true, "ExpiresInMinutes": 60}'Schaalmetrieken: CPU versus geheugen versus ALB
Kies je schaalmetriek zorgvuldig. CPU-gebruik is de standaard en werkt goed voor rekenintensieve werkbelastingen. Geheugengebruik (ECSServiceAverageMemoryUtilization) is nuttig voor toepassingen die door geheugen worden beperkt, maar voor meer geheugen moet je extra taken toevoegen. Als je taak wordt beperkt door het geheugen per taak in plaats van door gelijktijdige verwerking, is het mogelijk beter om de geheugentoewijzing in de taakdefinitie aan te passen. ALBRequestCountPerTarget houdt rechtstreeks verband met de gebruikerservaring en is de meest bruikbare metriek voor web-API's: schaal op basis van de werkelijke verzoeksnelheid per taak.
Implementatiecircuitonderbreker van ECS
De implementatiecircuitonderbreker van ECS detecteert mislukte implementaties automatisch en zet ze terug naar de laatst stabiele versie. Zonder deze functie zou een slechte implementatie (een container die niet slaagt voor gezondheidscontroles) ervoor zorgen dat ECS eindeloos nieuwe taken probeert te starten. Als de circuitonderbreker is ingeschakeld en een bepaald percentage van de nieuw gestarte taken binnen een detectievenster niet slaagt voor de gezondheidscontroles, markeert ECS de implementatie als MISLUKT en zet het automatisch terug naar de vorige revisie van de taakdefinitie. Zo voorkom je langdurige verslechtering van de service door slechte implementaties.
aws ecs create-service \
--cluster 'MyAppCluster' \
--service-name 'MyAppService' \
--task-definition 'myapp-task:5' \
--desired-count 3 \
--deployment-configuration '{
"deploymentCircuitBreaker": {
"enable": true,
"rollback": true
},
"minimumHealthyPercent": 100,
"maximumPercent": 200
}'Architectuur van begin tot eind: ECS + ALB + automatisch schalen
Een productierijpe architectuur voor een gecontaineriseerde web-API: Route 53 verwijst het domein naar een ALB-DNS-naam; de ALB beëindigt HTTPS (ACM-certificaat), past WAF-regels toe en routeert verzoeken naar een doelgroep van een ECS-service; Fargate-taken in private subnetten verspreid over 3 AZ's verwerken de verzoeken; automatisch schalen van ECS-services past met doeltracking op ALBRequestCountPerTarget de taakentelling aan van 2 tot 50; taken maken verbinding met RDS Aurora en ElastiCache in private subnetten. Alle logboeken gaan naar CloudWatch Logs; metrieken sturen CloudWatch-dashboards en alarmen aan.
Korte controle
Test je begrip van de concepten van AWS Solutions Architect (SAA-C03) uit deze les.
Samenvatting van de les
In deze les heb je geleerd dat automatisch schalen van ECS-services Application Auto Scaling gebruikt met doeltracking (CPU, ALB-verzoeken of aangepaste metrieken) om de taakentelling aan te passen binnen ingestelde minimale en maximale grenzen, dat ALB-routering op basis van paden één load balancer geschikt maakt voor meerdere ECS-microservices door URL-paden naar verschillende doelgroepen te routeren, en dat de implementatiecircuitonderbreker mislukte implementaties automatisch terugdraait voordat ze langdurige verslechtering van de service veroorzaken. Hiermee is de module over ECS en containers voltooid. Vervolgens verkennen we Amazon EKS voor Kubernetes op AWS.
Leer AWS Solutions Architect met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “Automatisch schalen en load balancing van ECS-services” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad AWS Solutions Architect, waaronder “Automatisch schalen en load balancing van ECS-services”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus AWS Solutions Architect bevat in totaal 4 lessen.
Wat leer ik in “Automatisch schalen en load balancing van ECS-services”?
Koppel een ALB aan ECS-services voor routering op basis van paden en configureer automatisch schalen van services op basis van CPU-gebruik of aangepaste CloudWatch-metrics. Je oefent met AWS Solutions Architect door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met AWS Solutions Architect te beginnen?
Ervaring vooraf is niet nodig. AWS Solutions Architect op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Automatisch schalen en load balancing van ECS-services”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over AWS Solutions Architect?
Ja. Elke les over AWS Solutions Architect bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- ECS-clusters, taakdefinities en services
- EC2 Launch Type versus Fargate
- ECR: containerimages opslaan en ophalen
- Automatisch schalen en load balancing van ECS-services