ECS-klynger, task definitions og services
Definér ECS-opgavedefinitioner med containerafbildninger og ressourcegrænser, registrér dem i en klynge, og opret en tjeneste, der opretholder det ønskede antal
ECS-klynger, task definitions og services er en gratis AWS Solutions Architect-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i AWS Solutions Architect, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. AWS Solutions Architect-kurset indeholder 4 lektioner i alt.
Hvorfor bruge containere på AWS?
Containere pakker en applikation og alle dens afhængigheder i en portabel, isoleret enhed, der kører ensartet på tværs af miljøer. Amazon ECS (Elastic Container Service) er AWS' fuldt administrerede tjeneste til containerorkestrering, som kører Docker-containere uden at du skal administrere et kontrolplan. ECS integrerer tæt med AWS-tjenester (IAM, ALB, CloudWatch og Secrets Manager) og er den anbefalede måde at køre containere på AWS uden kompleksiteten ved Kubernetes.
ECS-klynger: grupperingsenheden
En ECS-klynge er en logisk gruppering af beregningsressourcer, hvor dine containere kører. En klynge kan indeholde EC2-instanser (EC2-starttype), Fargate-kapacitet (Fargate-starttype) eller begge dele. Du kan have flere tjenester og selvstændige opgaver i én klynge. Klynger er regionale, men strækker sig over tilgængelighedszoner. Et almindeligt mønster er én klynge pr. miljø (udvikling, test og produktion) med flere tjenester i hver klynge til forskellige mikrotjenester.
aws ecs create-cluster \
--cluster-name 'MyAppCluster' \
--capacity-providers FARGATE FARGATE_SPOT \
--default-capacity-provider-strategy \
capacityProvider=FARGATE,weight=1,base=1Opgavedefinitioner: planen
En opgavedefinition er planen for kørsel af containere i ECS – svarende til en Docker Compose-fil. Den angiver: containerafbildninger (ECR-URI'er eller Docker Hub), tildelinger af CPU og hukommelse, porttilknytninger, miljøvariabler, logningskonfiguration, diskenheder og IAM-opgaverollen. En opgavedefinition er versionsstyret – hver revision er uforanderlig. Du kan definere flere containere pr. opgave til sidecar-mønstre (hovedapp + logafsender + overvågningsagent).
{
'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}]
}]
}Opgaverolle kontra udførelsesrolle
ECS-opgaver bruger to separate IAM-roller med forskellige formål. Opgavens udførelsesrolle bruges af ECS-agenten til at hente containerafbildninger fra ECR, sende logge til CloudWatch og hente hemmeligheder fra Secrets Manager eller Parameter Store under opstart af opgaven. Opgaverollen bruges af programkoden, der kører i containeren, til at kalde AWS-tjenester (S3, DynamoDB og SQS). Tildel altid hver rolle tilladelser efter princippet om mindst mulige privilegier – giv aldrig udførelsesrollen tilladelser, som applikationen ikke har brug for.
ECS-tjenester til langvarige arbejdsbelastninger
En ECS-tjeneste vedligeholder et angivet antal opgaveinstanser, der kører samtidigt (det ønskede antal). Hvis en opgave fejler eller stopper, starter tjenestens planlægger automatisk en erstatning. Tjenester integrerer også med Elastic Load Balancing til fordeling af trafik og understøtter løbende implementeringer samt blue/green-implementeringer. Brug en tjeneste til enhver langvarig proces (webserver, API-server eller baggrundsarbejder). Til engangsjob skal du i stedet køre en selvstændig opgave.
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"
}
}'Netværkstilstande: awsvpc kontra bridge
Netværkstilstanden awsvpc giver hver ECS-opgave sin egen Elastic Network Interface (ENI) og private IP-adresse i din VPC – ligesom en EC2-instans. Det muliggør detaljeret styring af sikkerhedsgrupper pr. opgave og er påkrævet for Fargate-opgaver. Netværkstilstanden bridge bruger Dockers indbyggede virtuelle netværk på værten med porttilknytning fra vært til container – den deler værts-EC2-instansens ENI. Til SAA-C03-eksamen bruger Fargate altid awsvpc; EC2-starttypen kan bruge begge.
Tilknytning af en load balancer til en ECS-tjeneste
Registrer din ECS-tjeneste i en ALB-målgruppe for at fordele trafikken mellem opgaveinstanser. Når en ny opgave starter, registrerer ECS den automatisk i målgruppen; når den stopper, fjerner ECS den fra målgruppen. Konfigurer en nådig periode for tilstandstjek (f.eks. 60-120 sekunder), så containerne får tid til at starte, før tilstandstjek udføres. Uden en sådan periode kan ALB markere en langsomt startende container som usund, før den er klar, hvilket kan medføre gentagne udskiftninger.
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 3Løbende implementering kontra blue/green-implementering
ECS-tjenester understøtter to implementeringsstrategier: løbende opdatering erstatter gradvist gamle opgaver med nye – konfigureret med minimumHealthyPercent (nedre grænse) og maximumPercent (øvre grænse). Indstillingen 100/200 betyder, at gamle opgaver kører, mens nye startes (100 % sunde påkrævet, op til 200 % kapacitet). En blue/green-implementering (via AWS CodeDeploy) opretter et nyt opgavesæt ved siden af det gamle, flytter gradvist trafikken ved hjælp af vægtet routing i ALB og afslutter de gamle opgaver efter validering. Blue/green understøtter tilbagerulning uden nedetid.
CloudWatch-logning fra ECS
Konfigurer logdriveren awslogs i din opgavedefinition for at sende containerens stdout/stderr direkte til CloudWatch Logs. Angiv en loggruppe, region og streampræfiks. Opgavens udførelsesrolle skal have tilladelserne logs:CreateLogStream og logs:PutLogEvents. Til centraliseret logindsamling på tværs af flere tjenester kan du overveje at bruge FireLens (en sidecar-container med Fluent Bit eller Fluentd) til at videresende logge til S3, OpenSearch eller logningssystemer fra tredjeparter.
'logConfiguration': {
'logDriver': 'awslogs',
'options': {
'awslogs-group': '/ecs/myapp',
'awslogs-region': 'us-east-1',
'awslogs-stream-prefix': 'myapp'
}
}ECS-tjenesteopdagelse med Cloud Map
Når mikrotjenester i ECS skal kommunikere med hinanden, fungerer hardkodede IP-adresser ikke, fordi opgaver er midlertidige og får nye IP-adresser ved hver start. Brug AWS Cloud Map (ECS-tjenesteopdagelse) til at registrere hver opgaves IP-adresse og port i et DNS-navnerum. Andre tjenester slår myservice.namespace.local op og får de aktuelle IP-adresser for sunde opgaver. ECS registrerer automatisk nye opgaver og fjerner fejlede opgaver, så DNS-posterne holdes korrekte uden manuel administration.
Hemmeligheder i ECS-opgavedefinitioner
Hardkod aldrig legitimationsoplysninger i opgavedefinitioner. Referer i stedet til hemmeligheder i Secrets Manager eller Parameter Store i din opgavedefinition – ECS indsætter dem som miljøvariabler ved opstart af opgaven. Opgavens udførelsesrolle skal have tilladelse til at hente hemmelighederne. Til Secrets Manager skal du bruge secretsmanager:GetSecretValue; til Parameter Store skal du bruge ssm:GetParameters. Hemmeligheder hentes én gang ved opstart af containeren. Roterede hemmeligheder kræver, at opgaven erstattes, før de nye værdier anvendes.
'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'
}
]Hurtigt tjek
Test din forståelse af AWS Solutions Architect-koncepterne (SAA-C03) fra denne lektion.
Opsummering af lektionen
I denne lektion har du lært, at ECS-klynger grupperer beregningsressourcer, hvor opgaver kører, at opgavedefinitioner definerer containerafbildninger, CPU/hukommelse, roller og logning som versionsstyrede planer, og at ECS-tjenester vedligeholder det ønskede antal opgaver, integrerer med ALB til trafikfordeling og understøtter løbende eller blue/green-implementeringer. Næste emne er en sammenligning af EC2-starttypen med den serverløse Fargate-starttype.
Lær AWS Solutions Architect med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “ECS-klynger, task definitions og services” gratis?
Ja — alle 3 lektioner i læringssporet AWS Solutions Architect, inklusive “ECS-klynger, task definitions og services”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. AWS Solutions Architect-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “ECS-klynger, task definitions og services”?
Definér ECS-opgavedefinitioner med containerafbildninger og ressourcegrænser, registrér dem i en klynge, og opret en tjeneste, der opretholder det ønskede antal Du øver dig i AWS Solutions Architect med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på AWS Solutions Architect?
Der kræves ingen tidligere erfaring. AWS Solutions Architect på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “ECS-klynger, task definitions og services”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne AWS Solutions Architect-lektion?
Ja. Alle AWS Solutions Architect-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- ECS-klynger, task definitions og services
- EC2-starttype kontra Fargate
- ECR: Lagring og hentning af containerafbildninger
- Automatisk skalering og belastningsfordeling af ECS-tjenester