Skip to content
Deploierea aplicatiilor containerizate pe AWS ECS Fargate: Ghid practic
← ← Înapoi la Idei Cloud

Deploierea aplicatiilor containerizate pe AWS ECS Fargate: Ghid practic

Rularea containerelor in productie necesita orchestrare fiabila, scalare automata si un efort operational minim. AWS Elastic Container Service (ECS) cu tipul de lansare Fargate raspunde tuturor acestor cerinte prin eliminarea completa a necesitarii de a aprovisiona sau administra servere. In acest ghid, parcurgem ce este Fargate, cum se configureaza un deployment pregatit pentru productie si cum se optimizeaza costurile.

Ce este AWS ECS Fargate?

Amazon ECS este un serviciu complet administrat de orchestrare a containerelor. Atunci cand alegeti tipul de lansare Fargate, AWS preia responsabilitatea pentru intreaga infrastructura de calcul. Definiti containerele, specificati cerintele de CPU si memorie, iar Fargate se ocupa de restul: aprovizionarea gazdelor, plasarea task-urilor, actualizarea sistemului de operare si scalarea flotei.

Spre deosebire de tipul de lansare EC2, unde administrati singuri un cluster de instante EC2, Fargate abstractizeaza complet nivelul de server. Platiti doar pentru resursele de vCPU si memorie pe care task-urile le consuma efectiv, facturarea fiind pe secunda cu un minim de un minut.

Configurare pas cu pas

1. Construirea si publicarea imaginii Docker

Incepeti prin crearea unei imagini Docker pentru aplicatia dumneavoastra si publicarea acesteia in Amazon Elastic Container Registry (ECR). ECR se integreaza nativ cu ECS si suporta scanarea imaginilor, politici de ciclu de viata si replicare intre regiuni.

aws ecr create-repository --repository-name aplicatia-mea
docker build -t aplicatia-mea:latest .
docker tag aplicatia-mea:latest <account-id>.dkr.ecr.<region>.amazonaws.com/aplicatia-mea:latest
aws ecr get-login-password | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com
docker push <account-id>.dkr.ecr.<region>.amazonaws.com/aplicatia-mea:latest

2. Crearea Task Definition-ului

Un task definition este schita containerului. Specifica imaginea Docker, alocarea de CPU si memorie, maparea porturilor, variabilele de mediu, configuratia de logging si rolurile IAM.

Parametri esentiali de configurat:

  • networkMode: Setat pe awsvpc (obligatoriu pentru Fargate). Fiecare task primeste propria interfata de retea elastica si o adresa IP privata.
  • requiresCompatibilities: Setat pe FARGATE.
  • cpu / memory: Alegeti din combinatiile suportate (de exemplu, 0.25 vCPU / 512 MB, 1 vCPU / 2 GB, pana la 16 vCPU / 120 GB).
  • logConfiguration: Folositi driver-ul awslogs pentru a transmite logurile containerului catre CloudWatch.
  • executionRoleArn: Un rol IAM care acorda ECS-ului permisiunea de a descarca imaginile din ECR si de a scrie loguri.
  • taskRoleArn: Un rol IAM pe care codul aplicatiei il asuma la runtime pentru a accesa alte servicii AWS.

3. Configurarea retelei

Task-urile Fargate ruleaza in interiorul unui VPC. Creati sau selectati subretele private pentru task-uri si asociati un security group care permite trafic inbound doar pe porturile pe care aplicatia le expune. Pentru servicii accesibile din internet, plasati un Application Load Balancer (ALB) in subretele publice si directionati traficul catre task-uri in subretetele private.

4. Crearea unui serviciu ECS

Un serviciu ECS mentine numarul dorit de instante de task-uri in executie si se integreaza cu ALB-ul pentru verificari de sanatate si distribuirea traficului. La crearea serviciului, specificati:

  • Clusterul si task definition-ul.
  • Numarul dorit de task-uri.
  • Configuratia de retea (subretele, security groups, asignare IP public).
  • Target group-ul load balancer-ului, numele containerului si portul containerului.

Scheduler-ul serviciului inlocuieste automat task-urile cu probleme si le distribuie intre Availability Zones pentru disponibilitate ridicata.

Integrarea cu Application Load Balancer

Un ALB este esential pentru deployment-urile Fargate de productie. Ofera rutare bazata pe cale si pe host, terminare TLS, verificari de sanatate si connection draining. Creati un target group cu tipul de target setat pe ip (nu instance, deoarece task-urile Fargate folosesc modul de retea awsvpc). Configurati cai de health check care returneaza HTTP 200 de la aplicatie si setati valori adecvate pentru deregistration delay, asigurand opriri gratioase in timpul deployment-urilor.

Politici de auto-scaling

ECS Service Auto Scaling ajusteaza numarul dorit de task-uri pe baza metricilor CloudWatch. Trei tipuri de politici sunt disponibile:

  • Target Tracking: Optiunea cea mai simpla. Setati o valoare tinta pentru o metrica precum utilizarea medie a CPU (de exemplu, 60%), iar ECS ajusteaza automat numarul de task-uri pentru a mentine acea tinta.
  • Step Scaling: Definiti ajustari de scalare care corespund pragurilor alarmelor CloudWatch. Util cand aveti nevoie de comportamente diferite de scale-out si scale-in.
  • Scheduled Scaling: Cresteti sau reduceti capacitatea la momente predeterminate, ideal pentru sarcini cu tipare de trafic previzibile.

Pentru majoritatea aplicatiilor, incepeti cu target tracking pe utilizarea CPU la 60-70%. Adaugati o a doua politica care urmareste numarul de cereri pe target din ALB daca sarcina este mai degraba legata de I/O decat de CPU.

Strategii de optimizare a costurilor

Preturile Fargate sunt transparente, dar pot creste rapid. Iata metode practice de reducere a costurilor:

  • Dimensionati corect task-urile: Evitati supra-aprovizionarea de CPU si memorie. Folositi metricile Container Insights pentru a identifica utilizarea reala a resurselor si ajustati task definition-urile in consecinta.
  • Folositi Fargate Spot: Pentru sarcinile tolerante la intreruperi (job-uri batch, procesoare de cozi), Fargate Spot ofera economii de pana la 70%. Task-urile pot fi intrerupte cu un avertisment de doua minute, asa ca proiectati pentru oprire gratiosa.
  • Valorificati Savings Plans: Compute Savings Plans se aplica si la Fargate si pot reduce costurile cu pana la 50% in schimbul unui angajament de unu sau trei ani.
  • Optimizati dimensiunea imaginilor: Imaginile mai mici reduc costurile de stocare ECR si accelereaza timpul de pornire al task-urilor. Folositi build-uri multi-etape si imagini de baza minimale precum Alpine sau distroless.
  • Revizuiti volumul de logging: CloudWatch Logs factureaza ingestia si stocarea. Filtrati logurile detaliate la nivelul aplicatiei si setati politici de retentie a logurilor.

Fargate vs. EC2 vs. EKS: Alegerea abordarii potrivite

| Criteriu | Fargate | EC2 Launch Type | EKS (Kubernetes) | |---|---|---|---| | Administrare servere | Niciuna | Administrati instantele | Configurati control plane-ul | | Granularitate scalare | Per task | Per instanta + per task | Per pod + per nod | | Timp de pornire | 30-60 secunde | Depinde de lansarea instantei | Depinde de aprovizionarea nodului | | Model de cost | Platiti per resurse task | Platiti per instanta (Reserved/Spot) | Taxa control plane + compute | | Suport GPU | Limitat | Suport complet | Suport complet | | Ideal pentru | Microservicii, API-uri, job-uri batch | Sarcini mari si stabile | Echipe cu experienta Kubernetes |

Alegeti Fargate cand doriti zero administrare a infrastructurii si sarcinile au trafic variabil sau imprevizibil. Alegeti EC2 cand aveti nevoie de instante GPU, tipuri specifice de instante sau doriti sa optimizati costurile pentru sarcini mari si stabile. Alegeti EKS cand echipa are expertiza Kubernetes si aveti nevoie de portabilitate intre furnizori cloud sau functionalitati avansate de planificare.

Sfaturi practice pentru deployment-uri de productie

  • Folositi deployment-uri rolling cu minimumHealthyPercent setat la 100 si maximumPercent setat la 200. Aceasta asigura deployment-uri fara downtime prin lansarea noilor task-uri inainte de oprirea celor vechi.
  • Activati ECS Exec pentru depanare. Ofera acces interactiv la shell-ul containerelor in executie fara SSH, folosind AWS Systems Manager in spate.
  • Setati timeout-uri de oprire adecvate. Parametrul stopTimeout ofera aplicatiei timp sa finalizeze cererile in curs inainte ca containerul sa fie oprit fortat.
  • Implementati verificari de sanatate atat la nivelul containerului (in task definition) cat si la nivelul target group-ului ALB. Folositi endpoint-uri distincte daca este necesar.
  • Folositi AWS Copilot sau CDK pentru a gestiona infrastructura ca si cod. Ambele instrumente simplifica aprovizionarea resurselor ECS si suporta generarea de pipeline-uri CI/CD.
  • Monitorizati cu Container Insights pentru vizibilitate asupra metricilor de CPU, memorie, retea si stocare la nivelul task-ului si serviciului.

Concluzie

AWS ECS Fargate ofera un echilibru convingator intre simplitate si putere pentru rularea aplicatiilor containerizate. Prin eliminarea administrarii serverelor, permite echipelor de inginerie sa se concentreze pe logica aplicatiei in loc de infrastructura. Cu dimensionare atenta a task-urilor, politici de auto-scaling si strategii de optimizare a costurilor, Fargate poate servi drept fundatie robusta pentru sarcinile de productie de orice dimensiune.