Automatyczne skalowanie usług ECS i równoważenie obciążenia
Dołączać ALB do usług ECS na potrzeby routingu opartego na ścieżkach oraz konfigurować automatyczne skalowanie usług w reakcji na użycie procesora lub niestandardowe metryki CloudWatch.
Automatyczne skalowanie usług ECS i równoważenie obciążenia to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Potrzeba automatycznego skalowania usługi ECS
Stała wartość desired count w usłudze ECS nie reaguje na wahania ruchu — albo przydzielają Państwo zbyt dużo zasobów (marnując pieniądze), albo zbyt mało (pogarszając wydajność). ECS Service Auto Scaling automatycznie dostosowuje wartość desired count zadań na podstawie metryk CloudWatch. Wykorzystuje w tym celu usługę Application Auto Scaling — ten sam mechanizm jest używany przez DynamoDB, Aurora i ElastiCache. Automatyczne skalowanie usług ECS obsługuje zasady śledzenia celu, skalowania krokowego i skalowania według harmonogramu.
Rejestrowanie ECS jako skalowalnego celu
Przed dodaniem zasad skalowania należy zarejestrować usługę ECS w Application Auto Scaling jako scalable target. Należy określić minimalną i maksymalną liczbę zadań, nazwę klastra oraz nazwę usługi jako identyfikator zasobu. Tworzy to zakres, w którym będzie działać automatyczne skalowanie. Minimalna liczba zapewnia stałą bazową pojemność, a maksymalna zapobiega niekontrolowanemu skalowaniu, które mogłoby wyczerpać pojemność Fargate lub instancji EC2.
aws application-autoscaling register-scalable-target \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id 'service/MyAppCluster/MyAppService' \
--min-capacity 2 \
--max-capacity 20Śledzenie celu dla usług ECS
Target Tracking to zalecana zasada automatycznego skalowania dla większości usług ECS. Najczęściej używaną metryką docelową jest ECSServiceAverageCPUUtilization — należy ustawić cel na poziomie 50–70%, a ECS będzie dodawać lub usuwać zadania, aby utrzymać ten poziom użycia procesora. Inną przydatną metryką jest ALBRequestCountPerTarget: śledzi ona liczbę żądań ALB przypadających na zadanie i umożliwia skalowanie w celu utrzymania docelowej liczby żądań na instancję. AWS automatycznie obsługuje skalowanie w górę i w dół, stosując odpowiednie okresy schładzania.
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
}'Kierowanie ruchu ALB do usług ECS
Dołączenie Application Load Balancer (ALB) do usługi ECS rozdziela ruch HTTP/HTTPS między wszystkie uruchomione zadania. Grupa docelowa ALB rejestruje adres IP każdego zadania (w przypadku Fargate/awsvpc) lub port kontenera (w trybie bridge). ECS automatycznie rejestruje nowe zadania w grupie docelowej podczas ich uruchamiania i wyrejestrowuje je podczas zatrzymywania. ALB wykonuje testy kondycji każdego zadania; zadania uznane za niesprawne są opróżniane (połączenia są zamykane w kontrolowany sposób), zanim usługa je zakończy.
Kierowanie na podstawie ścieżki dla wielu usług
Jednym z użytecznych wzorców jest kierowanie różnych ścieżek URL do różnych usług ECS za pomocą ALB path-based routing. Pojedynczy ALB z jednym odbiornikiem HTTPS może kierować: /api/orders/* do usługi ECS Orders, /api/users/* do usługi ECS Users oraz /api/products/* do usługi ECS Products — każda z nich korzysta z własnej usługi ECS i niezależnego skalowania. Eliminuje to potrzebę używania oddzielnych modułów równoważenia obciążenia dla każdego mikrousługi, obniżając koszty i upraszczając zarządzanie DNS.
# 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"}]'Opróżnianie połączeń i opóźnienie wyrejestrowania
Gdy zadanie ECS jest kończone (podczas skalowania w dół lub wdrażania), ALB oznacza je jako draining i przestaje kierować do niego nowe żądania, jednocześnie pozwalając na zakończenie żądań będących w toku. deregistration delay (domyślnie 300 sekund, z możliwością konfiguracji w zakresie 0–3600 sekund) określa, jak długo ALB czeka przed wymuszonym zamknięciem połączeń. W przypadku ECS i krótkiego czasu trwania żądań warto ustawić mniejsze opóźnienie wyrejestrowania (30–60 sekund), aby przyspieszyć wdrożenia i operacje skalowania w dół. W przypadku długotrwałych połączeń (WebSocket, przesyłanie plików) należy pozostawić większe opóźnienie.
# 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'Niestandardowe metryki skalowania ECS
Poza użyciem procesora i pamięci można publikować custom CloudWatch metrics z aplikacji (głębokość kolejki, aktywne sesje, kluczowe wskaźniki biznesowe) i używać ich do sterowania skalowaniem. Jeśli na przykład każde zadanie ECS może jednocześnie obsługiwać 50 komunikatów z kolejki, można publikować głębokość kolejki SQS jako niestandardową metrykę i utworzyć zasadę śledzenia celu ustawioną na 50 komunikatów na zadanie. Umożliwia to bezpośrednie skalowanie sterowane logiką biznesową zamiast polegania na metrykach infrastruktury, które mogą nie odzwierciedlać obciążenia aplikacji.
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 ecsOchrona zadań przed skalowaniem w dół
Podobnie jak EC2 Auto Scaling, ECS obsługuje task scale-in protection. Uruchomione zadanie może za pośrednictwem interfejsu API ECS ustawić własną flagę ochrony przed skalowaniem w dół, aby nie zostać zakończone podczas skalowania w dół w trakcie przetwarzania krytycznego zadania. Jest to przydatne w przypadku zadań ECS pełniących funkcję pracowników SQS — pracownik, który właśnie pobrał długotrwałe zadanie, może się ochronić, zakończyć pracę, a następnie usunąć ochronę. Bez tego skalowanie w dół mogłoby zakończyć zadanie w trakcie przetwarzania, powodując powielenie zadania lub utratę danych.
# 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}'Metryki skalowania: procesor, pamięć czy ALB
Metrykę skalowania należy wybrać starannie. CPU utilisation jest ustawieniem domyślnym i sprawdza się w przypadku obciążeń ograniczonych wydajnością obliczeniową. Memory utilisation (ECSServiceAverageMemoryUtilization) jest przydatne w aplikacjach ograniczonych ilością pamięci, ale zwiększenie dostępnej pamięci wymaga dodania zadań — jeśli zadanie jest ograniczone pamięcią przypisaną do pojedynczego zadania, a nie liczbą równoległych operacji, lepszym rozwiązaniem może być zmiana przydziału pamięci w definicji zadania. ALBRequestCountPerTarget bezpośrednio odpowiada doświadczeniu użytkownika i jest najbardziej praktyczną metryką dla internetowych interfejsów API — skalowanie odbywa się na podstawie rzeczywistej liczby żądań przypadających na zadanie.
Wyłącznik wdrożenia ECS
ECS Deployment Circuit Breaker automatycznie wykrywa nieudane wdrożenia i przywraca ostatnią stabilną wersję. Bez niego nieudane wdrożenie (kontener, który nie przechodzi testów kondycji) powodowałoby, że ECS bez końca próbowałby uruchamiać nowe zadania. Po włączeniu wyłącznika, jeśli określony odsetek nowo uruchomionych zadań nie przejdzie testów kondycji w wyznaczonym oknie wykrywania, ECS oznacza wdrożenie jako FAILED i automatycznie przywraca poprzednią wersję definicji zadania. Zapobiega to długotrwałemu pogorszeniu działania usługi wskutek nieudanego wdrożenia.
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
}'Architektura kompleksowa: ECS + ALB + Auto Scaling
Architektura gotowego do użycia produkcyjnie konteneryzowanego internetowego interfejsu API: Route 53 rozwiązuje domenę do nazwy DNS ALB; ALB kończy połączenia HTTPS (certyfikat ACM), stosuje reguły WAF i kieruje żądania do ECS service target group; zadania Fargate w prywatnych podsieciach w 3 AZ obsługują żądania; ECS Service Auto Scaling ze śledzeniem celu na podstawie ALBRequestCountPerTarget dostosowuje liczbę zadań od 2 do 50; zadania łączą się z RDS Aurora i ElastiCache w prywatnych podsieciach. Wszystkie dzienniki trafiają do CloudWatch Logs, a metryki zasilają pulpity i alarmy CloudWatch.
Szybkie sprawdzenie
Sprawdź swoją znajomość zagadnień AWS Solutions Architect (SAA-C03) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji nauczyli się Państwo, że ECS Service Auto Scaling korzysta z Application Auto Scaling i śledzenia celu (na podstawie użycia procesora, żądań ALB lub niestandardowych metryk), aby dostosowywać liczbę zadań w skonfigurowanym zakresie wartości minimalnej i maksymalnej; ALB path-based routing umożliwia jednemu modułowi równoważenia obciążenia obsługę wielu mikrousług ECS przez kierowanie ścieżek URL do różnych grup docelowych; natomiast Deployment Circuit Breaker automatycznie przywraca nieudane wdrożenia, zanim spowodują długotrwałe pogorszenie działania usługi. To kończy moduł dotyczący ECS i kontenerów — w następnej części omówimy Amazon EKS dla Kubernetes w AWS.
Często zadawane pytania
Czy lekcja „Automatyczne skalowanie usług ECS i równoważenie obciążenia” jest bezpłatna?
Tak — pełny tekst „Automatyczne skalowanie usług ECS i równoważenie obciążenia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Automatyczne skalowanie usług ECS i równoważenie obciążenia”?
Dołączać ALB do usług ECS na potrzeby routingu opartego na ścieżkach oraz konfigurować automatyczne skalowanie usług w reakcji na użycie procesora lub niestandardowe metryki CloudWatch. Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?
Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Automatyczne skalowanie usług ECS i równoważenie obciążenia”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?
Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Klastry ECS, definicje zadań i usługi
- Typ uruchomienia EC2 a Fargate
- ECR: przechowywanie i pobieranie obrazów kontenerów
- Automatyczne skalowanie usług ECS i równoważenie obciążenia