Klastry ECS, definicje zadań i usługi
Zdefiniować definicje zadań ECS z obrazami kontenerów i limitami zasobów, zarejestrować je w klastrze oraz utworzyć usługę utrzymującą żądaną liczbę zadań.
Klastry ECS, definicje zadań i usługi to bezpłatna lekcja AWS Solutions Architect na CoddyKit. To lekcja 1 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 AWS Solutions Architect, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AWS Solutions Architect zawiera 4 lekcji w sumie.
Dlaczego warto używać kontenerów w AWS?
Kontenery pakują aplikację wraz ze wszystkimi jej zależnościami w przenośną, izolowaną jednostkę, która działa spójnie w różnych środowiskach. Amazon ECS (Elastic Container Service) to w pełni zarządzana przez AWS usługa orkiestracji kontenerów, która uruchamia kontenery Docker bez konieczności zarządzania płaszczyzną sterowania. ECS jest ściśle zintegrowany z usługami AWS (IAM, ALB, CloudWatch, Secrets Manager) i jest zalecanym sposobem uruchamiania kontenerów w AWS bez złożoności Kubernetes.
Klastry ECS: jednostka grupowania
ECS Cluster to logiczne zgrupowanie zasobów obliczeniowych, w którym uruchamiane są kontenery. Klaster może zawierać instancje EC2 (typ uruchamiania EC2), zasoby Fargate (typ uruchamiania Fargate) albo oba te rodzaje zasobów. W jednym klastrze można mieć wiele usług i zadań autonomicznych. Klastry są regionalne, ale obejmują wiele stref dostępności. Typowy wzorzec polega na utworzeniu jednego klastra dla każdego środowiska (dev/staging/prod) i umieszczeniu w każdym z nich wielu usług odpowiadających różnym mikrousługom.
aws ecs create-cluster \
--cluster-name 'MyAppCluster' \
--capacity-providers FARGATE FARGATE_SPOT \
--default-capacity-provider-strategy \
capacityProvider=FARGATE,weight=1,base=1Definicje zadań: plan działania
Task Definition to plan uruchamiania kontenerów w ECS — odpowiednik pliku Docker Compose. Określa on: obrazy kontenerów (URI z ECR lub Docker Hub), przydziały procesora i pamięci, mapowania portów, zmienne środowiskowe, konfigurację rejestrowania, woluminy oraz rolę zadania IAM. Definicja zadania jest wersjonowana — każda poprawka jest niezmienna. W ramach jednego zadania można zdefiniować wiele kontenerów, stosując wzorzec sidecar (główna aplikacja + przekazywanie logów + agent monitorujący).
{
'family': 'myapp-task',
'networkMode': 'awsvpc',
'requiresCompatibilities': ['FARGATE'],
'cpu': '512',
'memory': '1024',
'executionRoleArn': 'arn:aws:iam::123456789012:role/ecsTaskExecutionRole',
'taskRoleArn': 'arn:aws:iam::123456789012:role/myAppTaskRole',
'containerDefinitions': [{
'name': 'myapp',
'image': '123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:latest',
'portMappings': [{'containerPort': 8080}]
}]
}Rola zadania a rola wykonawcza
Zadania ECS używają dwóch oddzielnych ról IAM o różnych zastosowaniach. Task Execution Role jest używana przez agenta ECS do pobierania obrazów kontenerów z ECR, wysyłania logów do CloudWatch oraz pobierania wpisów tajnych z Secrets Manager lub Parameter Store podczas uruchamiania zadania. Task Role jest używana przez kod aplikacji działający wewnątrz kontenera do wywoływania usług AWS (S3, DynamoDB, SQS). Należy zawsze oddzielnie przypisywać każdej roli uprawnienia zgodne z zasadą najmniejszych uprawnień — rola wykonawcza nigdy nie powinna otrzymywać uprawnień, których aplikacja nie potrzebuje.
Usługi ECS dla długotrwałych obciążeń
ECS Service utrzymuje określoną liczbę jednocześnie działających instancji zadań (desired count). Jeśli zadanie zakończy się niepowodzeniem lub zostanie zatrzymane, harmonogram usług automatycznie uruchomi jego zastępstwo. Usługi integrują się również z Elastic Load Balancing w celu rozdzielania ruchu oraz obsługują wdrożenia kroczące i wdrożenia blue/green. Usługi należy stosować do dowolnych procesów długotrwałych (serwer WWW, serwer API, proces roboczy działający w tle). W przypadku zadań jednorazowych należy zamiast tego uruchomić zadanie autonomiczne.
aws ecs create-service \
--cluster 'MyAppCluster' \
--service-name 'MyAppService' \
--task-definition 'myapp-task:5' \
--desired-count 3 \
--launch-type FARGATE \
--network-configuration '{
"awsvpcConfiguration": {
"subnets": ["subnet-aaa111", "subnet-bbb222"],
"securityGroups": ["sg-xyz"],
"assignPublicIp": "DISABLED"
}
}'Tryby sieci: awsvpc a bridge
Tryb sieci awsvpc przydziela każdemu zadaniu ECS własny interfejs sieciowy Elastic Network Interface (ENI) i prywatny adres IP w obrębie VPC — podobnie jak w przypadku instancji EC2. Umożliwia to szczegółową kontrolę grup zabezpieczeń dla poszczególnych zadań i jest wymagane w przypadku zadań Fargate. Tryb sieci bridge korzysta z wbudowanej w Docker wirtualnej sieci hosta i mapowania portów z hosta do kontenera — współdzieli interfejs ENI hostującej instancji EC2. Na egzaminie SAA-C03 należy pamiętać, że Fargate zawsze używa trybu awsvpc, natomiast typ uruchamiania EC2 może używać dowolnego z tych trybów.
Dołączanie modułu równoważenia obciążenia do usługi ECS
Należy zarejestrować usługę ECS w grupie docelowej ALB, aby rozdzielać ruch między instancje zadań. Po uruchomieniu nowego zadania ECS automatycznie rejestruje je w grupie docelowej, a po jego zatrzymaniu wyrejestrowuje. Należy skonfigurować okres karencji dla kontroli stanu (np. 60–120 sekund), aby dać kontenerom czas na uruchomienie przed rozpoczęciem kontroli stanu. Bez okresu karencji ALB może oznaczyć wolno uruchamiający się kontener jako niesprawny, zanim będzie gotowy, co może powodować pętle zastępowania.
aws ecs create-service \
--cluster 'MyAppCluster' \
--service-name 'MyAppService' \
--load-balancers \
'targetGroupArn=arn:aws:elasticloadbalancing:...,containerName=myapp,containerPort=8080' \
--health-check-grace-period-seconds 120 \
--task-definition 'myapp-task:5' \
--desired-count 3Wdrożenie kroczące a wdrożenie blue/green
Usługi ECS obsługują dwie strategie wdrażania: Rolling Update stopniowo zastępuje stare zadania nowymi — można ją skonfigurować za pomocą minimumHealthyPercent (wartość minimalna) i maximumPercent (wartość maksymalna). Ustawienie 100/200 oznacza, że stare zadania działają podczas uruchamiania nowych (wymagana jest dostępność 100%, a pojemność może wynosić do 200%). Wdrożenie Blue/Green (za pośrednictwem AWS CodeDeploy) tworzy nowy zestaw zadań obok starego, stopniowo przenosi ruch za pomocą ważonego routingu ALB i kończy działanie starych zadań po walidacji. Wdrożenie blue/green umożliwia wycofanie zmian bez przestoju.
Rejestrowanie w CloudWatch z ECS
Należy skonfigurować sterownik logów awslogs w definicji zadania, aby wysyłać standardowe wyjście i standardowe wyjście błędów kontenera bezpośrednio do CloudWatch Logs. Należy określić grupę logów, region i prefiks strumienia. Rola wykonawcza zadania wymaga uprawnień logs:CreateLogStream i logs:PutLogEvents. W przypadku centralnego agregowania logów z wielu usług warto rozważyć użycie FireLens (kontenera sidecar z Fluent Bit lub Fluentd) do przekierowywania logów do S3, OpenSearch lub systemów rejestrowania innych firm.
'logConfiguration': {
'logDriver': 'awslogs',
'options': {
'awslogs-group': '/ecs/myapp',
'awslogs-region': 'us-east-1',
'awslogs-stream-prefix': 'myapp'
}
}Wykrywanie usług ECS za pomocą Cloud Map
Gdy mikrousługi w ECS muszą się ze sobą komunikować, zakodowane na stałe adresy IP nie sprawdzą się, ponieważ zadania są efemeryczne i przy każdym uruchomieniu otrzymują nowe adresy IP. Należy użyć AWS Cloud Map (ECS Service Discovery) do rejestrowania adresu IP i portu każdego zadania w przestrzeni nazw DNS. Inne usługi mogą rozwiązywać nazwę myservice.namespace.local do aktualnych, sprawnych adresów IP zadań. ECS automatycznie rejestruje nowe zadania i wyrejestrowuje te, które uległy awarii, dzięki czemu rekordy DNS pozostają aktualne bez ręcznego zarządzania.
Wpisy tajne w definicjach zadań ECS
Nigdy nie należy umieszczać poświadczeń na stałe w definicjach zadań. Zamiast tego należy odwoływać się w definicji zadania do wpisów tajnych z Secrets Manager lub Parameter Store — ECS wstrzyknie je jako zmienne środowiskowe podczas uruchamiania zadania. Rola wykonawcza zadania musi mieć uprawnienia do pobierania wpisów tajnych. W przypadku Secrets Manager należy użyć uprawnienia secretsmanager:GetSecretValue, a w przypadku Parameter Store — ssm:GetParameters. Wpisy tajne są pobierane jednokrotnie podczas uruchamiania kontenera, dlatego ich rotacja wymaga zastąpienia zadania, aby nowe wartości zostały użyte.
'secrets': [
{
'name': 'DB_PASSWORD',
'valueFrom': 'arn:aws:secretsmanager:us-east-1:123456789012:secret:myapp/db-password-AbCdEf'
},
{
'name': 'API_KEY',
'valueFrom': 'arn:aws:ssm:us-east-1:123456789012:parameter/myapp/api-key'
}
]Szybki test
Sprawdź swoją wiedzę na temat zagadnień AWS Solutions Architect (SAA-C03) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji poznali Państwo następujące zagadnienia: ECS Clusters grupują zasoby obliczeniowe, w których uruchamiane są zadania, Task Definitions definiują obrazy kontenerów, procesor i pamięć, role oraz rejestrowanie w postaci wersjonowanych planów działania, a ECS Services utrzymują żądaną liczbę zadań, integrują się z ALB w celu rozdzielania ruchu oraz obsługują wdrożenia kroczące i blue/green. W następnej części porównamy typ uruchamiania EC2 z bezserwerowym typem uruchamiania Fargate.
Często zadawane pytania
Czy lekcja „Klastry ECS, definicje zadań i usługi” jest bezpłatna?
Tak — pełny tekst „Klastry ECS, definicje zadań i usługi” 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 AWS Solutions Architect, przejdź na CoddyKit PRO. Kurs AWS Solutions Architect zawiera 4 lekcji w sumie.
Co nauczysz się w „Klastry ECS, definicje zadań i usługi”?
Zdefiniować definicje zadań ECS z obrazami kontenerów i limitami zasobów, zarejestrować je w klastrze oraz utworzyć usługę utrzymującą żądaną liczbę zadań. Ćwiczysz AWS Solutions Architect 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ąć AWS Solutions Architect?
Nie wymagamy żadnego doświadczenia. AWS Solutions Architect 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 1 z 4.
Ile czasu zajmuje lekcja „Klastry ECS, definicje zadań i usługi”?
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 AWS Solutions Architect?
Tak. Każda lekcja AWS Solutions Architect 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