Cloud & IT Cert Prep · Lektion

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

Lektion 1 af 413 trin

ECS-klynger, task definitions og services er en gratis Cloud & IT Cert Prep-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Cloud & IT Cert Prep, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cloud & IT Cert Prep-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=1

Opgavedefinitioner: 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 3

Lø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.

Gratis at komme i gang

Lær Cloud & IT Cert Prep 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
150
Lektioner
600

Ofte stillede spørgsmål

Er lektionen “ECS-klynger, task definitions og services” gratis?

Ja — hele teksten til “ECS-klynger, task definitions og services” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Cloud & IT Cert Prep-kurset, skal du opgradere til CoddyKit PRO. Cloud & IT Cert Prep-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 Cloud & IT Cert Prep 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å Cloud & IT Cert Prep?

Der kræves ingen tidligere erfaring. Cloud & IT Cert Prep 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 Cloud & IT Cert Prep-lektion?

Ja. Alle Cloud & IT Cert Prep-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

  1. ECS-klynger, task definitions og services
  2. EC2-starttype kontra Fargate
  3. ECR: Lagring og hentning af containerafbildninger
  4. Automatisk skalering og belastningsfordeling af ECS-tjenester
← Tilbage til Cloud & IT Cert Prep