Der Betrieb von Containern in Produktionsumgebungen erfordert zuverlässige Orchestrierung, nahtlose Skalierung und minimalen operativen Aufwand. AWS Elastic Container Service (ECS) mit dem Starttyp Fargate erfüllt alle drei Anforderungen, indem es die Notwendigkeit der Serververwaltung vollständig eliminiert. In diesem Leitfaden erklären wir, was Fargate ist, wie ein produktionsreifes Deployment aufgesetzt wird und wie sich die Kosten im Griff behalten lassen.
Was ist AWS ECS Fargate?
Amazon ECS ist ein vollständig verwalteter Container-Orchestrierungsdienst. Wenn Sie den Starttyp Fargate wählen, übernimmt AWS die Verantwortung für die gesamte Recheninfrastruktur. Sie definieren Ihre Container, geben CPU- und Speicheranforderungen an, und Fargate kümmert sich um den Rest: Bereitstellung der Hosts, Platzierung der Tasks, Patchen des Betriebssystems und Skalierung der Flotte.
Im Gegensatz zum EC2-Starttyp, bei dem Sie selbst einen Cluster von EC2-Instanzen verwalten, abstrahiert Fargate die Serverebene vollständig. Sie zahlen nur für die vCPU- und Speicherressourcen, die Ihre Tasks tatsächlich verbrauchen, sekundengenau abgerechnet mit einem Minimum von einer Minute.
Schritt-für-Schritt-Einrichtung
1. Container-Image erstellen und hochladen
Beginnen Sie mit der Erstellung eines Docker-Images für Ihre Anwendung und laden Sie es in die Amazon Elastic Container Registry (ECR) hoch. ECR integriert sich nativ mit ECS und unterstützt Image-Scanning, Lifecycle-Richtlinien und regionsübergreifende Replikation.
aws ecr create-repository --repository-name meine-app
docker build -t meine-app:latest .
docker tag meine-app:latest <account-id>.dkr.ecr.<region>.amazonaws.com/meine-app: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/meine-app:latest
2. Task Definition erstellen
Eine Task Definition ist die Blaupause für Ihren Container. Sie spezifiziert das Docker-Image, CPU- und Speicherzuweisungen, Port-Mappings, Umgebungsvariablen, Logging-Konfiguration und IAM-Rollen.
Wesentliche Parameter:
- networkMode: Auf
awsvpcsetzen (für Fargate erforderlich). Jeder Task erhält seine eigene elastische Netzwerkschnittstelle und eine private IP-Adresse. - requiresCompatibilities: Auf
FARGATEsetzen. - cpu / memory: Aus den unterstützten Kombinationen wählen (z.B. 0,25 vCPU / 512 MB, 1 vCPU / 2 GB, bis zu 16 vCPU / 120 GB).
- logConfiguration: Den
awslogs-Treiber verwenden, um Container-Logs nach CloudWatch zu streamen. - executionRoleArn: Eine IAM-Rolle, die ECS die Berechtigung erteilt, Images aus ECR herunterzuladen und Logs zu schreiben.
- taskRoleArn: Eine IAM-Rolle, die Ihr Anwendungscode zur Laufzeit annimmt, um auf andere AWS-Dienste zuzugreifen.
3. Netzwerk einrichten
Fargate-Tasks laufen innerhalb einer VPC. Erstellen oder wählen Sie private Subnetze für Ihre Tasks und weisen Sie eine Security Group zu, die eingehenden Datenverkehr nur auf den Ports erlaubt, die Ihre Anwendung freigibt. Für internetfähige Dienste platzieren Sie einen Application Load Balancer (ALB) in öffentlichen Subnetzen und leiten den Datenverkehr an die Tasks in privaten Subnetzen weiter.
4. ECS-Service erstellen
Ein ECS-Service hält die gewünschte Anzahl laufender Task-Instanzen aufrecht und integriert sich mit dem ALB für Health Checks und Lastverteilung. Bei der Erstellung des Services geben Sie an:
- Den Cluster und die Task Definition.
- Die gewünschte Anzahl von Tasks.
- Die Netzwerkkonfiguration (Subnetze, Security Groups, öffentliche IP-Zuweisung).
- Die Target Group des Load Balancers, den Containernamen und den Container-Port.
Der Service-Scheduler ersetzt automatisch fehlerhafte Tasks und verteilt sie über Availability Zones für hohe Verfügbarkeit.
Integration mit dem Application Load Balancer
Ein ALB ist für produktive Fargate-Deployments unverzichtbar. Er bietet pfadbasiertes und hostbasiertes Routing, TLS-Terminierung, Health Checks und Connection Draining. Erstellen Sie eine Target Group mit dem Zieltyp ip (nicht instance, da Fargate-Tasks den awsvpc-Netzwerkmodus verwenden). Konfigurieren Sie Health-Check-Pfade, die HTTP 200 von Ihrer Anwendung zurückgeben, und legen Sie angemessene Werte für die Deregistration Delay fest, um reibungslose Abschaltungen während Deployments zu gewährleisten.
Auto-Scaling-Richtlinien
ECS Service Auto Scaling passt die gewünschte Task-Anzahl basierend auf CloudWatch-Metriken an. Drei Richtlinientypen stehen zur Verfügung:
- Target Tracking: Die einfachste Option. Legen Sie einen Zielwert für eine Metrik wie die durchschnittliche CPU-Auslastung fest (z.B. 60%), und ECS passt die Task-Anzahl automatisch an, um diesen Zielwert einzuhalten.
- Step Scaling: Definieren Sie Skalierungsanpassungen, die den Schwellenwerten von CloudWatch-Alarmen entsprechen. Nützlich, wenn Sie unterschiedliches Scale-Out- und Scale-In-Verhalten benötigen.
- Scheduled Scaling: Erhöhen oder verringern Sie die Kapazität zu vordefinierten Zeiten, ideal für Workloads mit vorhersagbaren Verkehrsmustern.
Für die meisten Anwendungen beginnen Sie mit Target Tracking auf CPU-Auslastung bei 60-70%. Fügen Sie eine zweite Richtlinie hinzu, die die ALB-Anfragenzahl pro Target verfolgt, wenn Ihr Workload eher I/O-gebunden als CPU-gebunden ist.
Strategien zur Kostenoptimierung
Die Fargate-Preisgestaltung ist transparent, kann aber schnell ansteigen. Hier sind praktische Wege zur Kostenreduzierung:
- Tasks richtig dimensionieren: Vermeiden Sie Über-Provisionierung von CPU und Speicher. Nutzen Sie Container-Insights-Metriken, um die tatsächliche Ressourcenauslastung zu ermitteln, und passen Sie die Task Definitions entsprechend an.
- Fargate Spot verwenden: Für fehlertolerante Workloads (Batch-Jobs, Queue-Verarbeitung) bietet Fargate Spot Einsparungen von bis zu 70%. Tasks können mit einer Zwei-Minuten-Vorwarnung unterbrochen werden, daher sollten Sie für ein geordnetes Herunterfahren planen.
- Savings Plans nutzen: Compute Savings Plans gelten auch für Fargate und können die Kosten um bis zu 50% senken, im Austausch für eine ein- oder dreijährige Verpflichtung.
- Image-Größe optimieren: Kleinere Images reduzieren die ECR-Speicherkosten und beschleunigen die Startzeit der Tasks. Verwenden Sie mehrstufige Builds und minimale Basis-Images wie Alpine oder Distroless.
- Logging-Volumen überprüfen: CloudWatch Logs berechnet Gebühren für Aufnahme und Speicherung. Filtern Sie detaillierte Logs auf Anwendungsebene und legen Sie Log-Aufbewahrungsrichtlinien fest.
Fargate vs. EC2 vs. EKS: Die richtige Wahl treffen
| Kriterium | Fargate | EC2-Starttyp | EKS (Kubernetes) |
|---|---|---|---|
| Serververwaltung | Keine | Sie verwalten Instanzen | Sie konfigurieren die Control Plane |
| Skalierungsgranularität | Pro Task | Pro Instanz + pro Task | Pro Pod + pro Node |
| Startzeit | 30-60 Sekunden | Abhängig vom Instanzstart | Abhängig von der Node-Bereitstellung |
| Kostenmodell | Bezahlung pro Task-Ressourcen | Bezahlung pro Instanz (Reserved/Spot) | Control-Plane-Gebühr + Compute |
| GPU-Unterstützung | Eingeschränkt | Volle Unterstützung | Volle Unterstützung |
| Ideal für | Microservices, APIs, Batch-Jobs | Große, stabile Workloads | Teams mit Kubernetes-Erfahrung |
Wählen Sie Fargate, wenn Sie keine Infrastrukturverwaltung wünschen und Ihre Workloads variablen oder unvorhersagbaren Datenverkehr aufweisen. Wählen Sie EC2, wenn Sie GPU-Instanzen, bestimmte Instanztypen benötigen oder die Kosten für große, stabile Workloads optimieren möchten. Wählen Sie EKS, wenn Ihr Team Kubernetes-Expertise mitbringt und Sie Portabilität zwischen Cloud-Anbietern oder erweiterte Scheduling-Funktionen benötigen.
Wenn Sie Fargate und App Runner nach Preis abwägen: Wir haben dieselbe App auf beiden durchgerechnet, inklusive Load Balancer und NAT.
Praxistipps für Produktions-Deployments
- Rolling Deployments verwenden mit
minimumHealthyPercentauf 100 undmaximumPercentauf 200. Dies gewährleistet Deployments ohne Ausfallzeit, indem neue Tasks gestartet werden, bevor alte beendet werden. - ECS Exec aktivieren für Fehlersuche. Es bietet interaktiven Shell-Zugang zu laufenden Containern ohne SSH, unter Verwendung von AWS Systems Manager.
- Stopp-Timeouts angemessen setzen: Der Parameter
stopTimeoutgibt Ihrer Anwendung Zeit, laufende Anfragen abzuschließen, bevor der Container zwangsweise beendet wird. - Health Checks implementieren sowohl auf Container-Ebene (in der Task Definition) als auch auf ALB-Target-Group-Ebene. Verwenden Sie bei Bedarf separate Endpunkte.
- AWS Copilot oder CDK verwenden, um Infrastruktur als Code zu verwalten. Beide Werkzeuge vereinfachen die Bereitstellung von ECS-Ressourcen und unterstützen die Generierung von CI/CD-Pipelines.
- Mit Container Insights überwachen, um Einblick in CPU-, Speicher-, Netzwerk- und Speichermetriken auf Task- und Service-Ebene zu erhalten.
Fazit
AWS ECS Fargate bietet ein überzeugendes Gleichgewicht zwischen Einfachheit und Leistungsfähigkeit für den Betrieb containerisierter Anwendungen. Durch die Eliminierung der Serververwaltung können sich Entwicklungsteams auf die Anwendungslogik statt auf die Infrastruktur konzentrieren. Mit durchdachter Task-Dimensionierung, Auto-Scaling-Richtlinien und Kostenoptimierungsstrategien kann Fargate als robustes Fundament für Produktions-Workloads jeder Größe dienen.