Amazon Elastic Container Service ist ein Container-Orchestrierungsservice von AWS. Im Gegensatz zu komplexen Kubernetes-Umgebungen will der Dienst eine einfachere Alternative für die Bereitstellung, Verwaltung und Skalierung von Docker-Containern in der Cloud bieten. Unser Workshop zeigt, wie Admins ECS für besonders geeignete Umgebungen wie Webanwendungen mit variierenden Lastmustern, Microservices-Architekturen oder Batch-Processing-Workloads an den Start bringen.
Der Elastic Container Service (ECS) von AWS will gegenüber selbstverwalteten Container-Umgebungen die operative Komplexität reduzieren. Zudem erlaubt der Dienst die Integration mit CloudWatch, Application Load Balancer und AWS Identity and Access Management (IAM), sowie automatische Hochverfügbarkeit durch Multi-AZ-Deployments.
Architektur und Launch Types
Die ECS-Architektur basiert auf vier zentralen Konzepten. Die erste sind Cluster, die als logische Gruppierung von Rechenkapazität fungieren, vergleichbar mit einem virtuellen Rechenzentrum für Container. Ein Cluster kann Elastic Compute Cloudinstanzen (EC2), Fargate-Kapazität oder sogar externe Hardware über ECS Anywhere umfassen. Als zweiter Baustein stellen Task Definitions JSON-basierte Baupläne dar, die exakt definieren, wie Container starten sollen. Sie spezifizieren Container-Images, CPU- und Memory-Anforderungen, Netzwerkkonfigurationen, Umgebungsvariablen und Volume-Mounts. Drittens repräsentieren Tasks laufende Instanzen einer Task-Definition. Ein Task kann einen oder mehrere Container umfassen, die zusammen eine Anwendungseinheit bilden. Tasks sind die kleinste bereitstellbare Einheit in ECS. Schließlich stellen Services sicher, dass immer die gewünschte Anzahl von Tasks läuft. Sie überwachen den Zustand der Tasks und ersetzen fehlerhafte Container automatisch. Services ermöglichen auch Rolling-Updates und die Integration mit Loadbalancern.
Darüber hinaus bietet ECS drei Launch-Types für unterschiedliche Anforderungen: Im "EC2 Launch Type" laufen Container auf selbstverwalteten EC2-Instanzen. Dieser Ansatz bietet maximale Kontrolle über die zugrundeliegende Infrastruktur und eignet sich für Umgebungen mit spezifischen Hardwareanforderungen oder bestehender EC2-Infrastruktur. Dementgegen ist "AWS Fargate" ein serverloser Ansatz, bei dem AWS die komplette Infrastruktur verwaltet. Administratoren müssen keine EC2-Instanzen provisionieren oder managen, sie definieren lediglich die Container-Anforderungen und AWS kümmert sich um den Rest. Der dritte Typ nennt sich "External (ECS Anywhere)" und ermöglicht das Ausführen von ECS-Tasks auf eigener Hardware in lokalen Rechenzentren oder anderen Cloudumgebungen, während die zentrale Verwaltung über die AWS-Konsole erfolgt.
Der Elastic Container Service (ECS) von AWS will gegenüber selbstverwalteten Container-Umgebungen die operative Komplexität reduzieren. Zudem erlaubt der Dienst die Integration mit CloudWatch, Application Load Balancer und AWS Identity and Access Management (IAM), sowie automatische Hochverfügbarkeit durch Multi-AZ-Deployments.
Architektur und Launch Types
Die ECS-Architektur basiert auf vier zentralen Konzepten. Die erste sind Cluster, die als logische Gruppierung von Rechenkapazität fungieren, vergleichbar mit einem virtuellen Rechenzentrum für Container. Ein Cluster kann Elastic Compute Cloudinstanzen (EC2), Fargate-Kapazität oder sogar externe Hardware über ECS Anywhere umfassen. Als zweiter Baustein stellen Task Definitions JSON-basierte Baupläne dar, die exakt definieren, wie Container starten sollen. Sie spezifizieren Container-Images, CPU- und Memory-Anforderungen, Netzwerkkonfigurationen, Umgebungsvariablen und Volume-Mounts. Drittens repräsentieren Tasks laufende Instanzen einer Task-Definition. Ein Task kann einen oder mehrere Container umfassen, die zusammen eine Anwendungseinheit bilden. Tasks sind die kleinste bereitstellbare Einheit in ECS. Schließlich stellen Services sicher, dass immer die gewünschte Anzahl von Tasks läuft. Sie überwachen den Zustand der Tasks und ersetzen fehlerhafte Container automatisch. Services ermöglichen auch Rolling-Updates und die Integration mit Loadbalancern.
Darüber hinaus bietet ECS drei Launch-Types für unterschiedliche Anforderungen: Im "EC2 Launch Type" laufen Container auf selbstverwalteten EC2-Instanzen. Dieser Ansatz bietet maximale Kontrolle über die zugrundeliegende Infrastruktur und eignet sich für Umgebungen mit spezifischen Hardwareanforderungen oder bestehender EC2-Infrastruktur. Dementgegen ist "AWS Fargate" ein serverloser Ansatz, bei dem AWS die komplette Infrastruktur verwaltet. Administratoren müssen keine EC2-Instanzen provisionieren oder managen, sie definieren lediglich die Container-Anforderungen und AWS kümmert sich um den Rest. Der dritte Typ nennt sich "External (ECS Anywhere)" und ermöglicht das Ausführen von ECS-Tasks auf eigener Hardware in lokalen Rechenzentren oder anderen Cloudumgebungen, während die zentrale Verwaltung über die AWS-Konsole erfolgt.
Ersten ECS-Service erstellen
Für diesen Workshop benötigen Sie ein AWS-Konto mit entsprechenden ECS-Berechtigungen. Grundlegende Docker-Kenntnisse sind hilfreich, aber nicht zwingend erforderlich. Als praktisches Beispiel verwenden wir einen nginx-Webserver, der eine einfache Startseite bereitstellt.
Um nun einen ECS-Cluster anzulegen, öffnen Sie die AWS-Managementkonsole und navigieren zu "Services / Elastic Container Service". Hier klicken Sie auf "Cluster erstellen", vergeben einen Namen und wählen die Cluster-Vorlage mit Fargate aus. Nun aktivieren Sie "Container Insights" oder "Container Insights mit verbesserter Beobachtbarkeit" für das automatische Monitoring. Ihre Angaben bestätigen Sie mit "Cluster erstellen". Der Cluster entsteht innerhalb weniger Sekunden und steht als zentrale Verwaltungseinheit für Ihre Container bereit.
Bild 1: Der ECS zugrundliegende Cluster ist über die AWS-Managementkonsole zügig eingerichtet, denn nur wenige Angaben sind erforderlich.
Im zweiten Schritt erstellen Sie die Task-Definition: Navigieren Sie zu "Aufgabendefinitionen" und klicken Sie "Neue Aufgabendefinition erstellen". Hier wählen Sie als Starttyp "AWS Fargate" und vergeben den Aufgabendefinitions-Familiennamen "nginx-task-1". Lassen Sie die "Aufgaben-Rolle" zunächst leer (für erste Tests ausreichend) und setzen Sie den Arbeitsspeicher auf 0,5 GByte und die CPU auf 0,25 vCPU. Dann statten Sie Ihren Container mit der folgenden Konfiguration aus:
1. Container-Name: "nginx-container"
2. Image-URL: "nginx:latest" (wird automatisch von Docker Hub bezogen)
4. Belassen Sie andere Einstellungen auf den Standardwerten und schließen Sie mit "Erstellen" ab.
Um nun den Service zu konfigurieren und bereitzustellen kehren Sie zu Ihrem Cluster zurück und wechseln zum Tab "Services". Dort klicken Sie "Erstellen" und benennen zunächst die Aufgabendefinitions-Familie mit "nginx-task-1" und den Servicenamen als "nginx-service". Jetzt wechseln Sie unter "Datenverarbeitungsoptionen" zu "Starttyp" und wählen "Fargate". Hier hinterlegen Sie bei "Plattformversion" den Wert "Latest", bei "Cluster" geben Sie Ihrem Rechnerverbund einen Namen. Die Anzahl der Tasks setzen Sie auf "2" für Hochverfügbarkeit. Im letzten Schritt gilt es unter "Bereitstellungsoptionen" noch das "Minimum laufende Aufgaben: 50%" und das "Maximum ausgeführte Aufgaben: 200%" einzustellen.
Bild 2: Für ECS stehen drei Starttypen (Launch-Types) zur Verfügung, wir entscheiden uns für AWS Fargate.
Netzwerkkonfiguration für Fargate
Die Netzwerkkonfiguration ist bei Fargate besonders wichtig, da jeder Task eine eigene ENI (Elastic Network Interface) erhält. Bei "VPC" wählen Sie Ihre Standard-VPC und legen dann mindestens zwei Subnetze in verschiedenen Availability Zones an. Nun erstellen Sie eine neue Security-Group mit Regeln für "Eingehend" und den Werten "Typ TCP", "Port 80" und "Quelle 0.0.0.0/0" – Letzteres jedoch nur für Testzwecke! Dann setzen Sie die öffentliche IP-Adresse auf "ENABLED", damit die Container über das Internet erreichbar sind.
Belassen Sie den Rest auf den Standardwerten und starten Sie den Service. Sie können nun den Deployment-Status beobachten, bei dem die Tasks die Phasen "PENDING", "PROVISIONING" und "RUNNING" durchlaufen. Bei Problemen prüfen Sie die Events des Services auf Fehlermeldungen. Passt alles, wählen Sie die Aufgaben aus und notieren sich die öffentlichen IP-Adressen der laufenden Tasks. So ausgestattet testen Sie die nginx-Startseite im Browser, indem Sie auf den Hyperlink der öffentlichen IP-Adresse klicken. Für Produktionsumgebungen sollten Sie zusätzlich Health-Checks, Service-Auto-Scaling und Loadbalancer-Integration konfigurieren.
Container ohne Servermanagement
AWS Fargate repräsentiert den Übergang von infrastruktur- zu anwendungszentrierter Container-Orchestrierung. Während traditionelle Ansätze die Verwaltung von EC2-Instanzen erfordern und selbst andere serverlose Container-Services oft proprietäre APIs nutzen, sind Cluster-Größenplanung, Node-Verwaltung und Kapazitätsreservierungen nicht notwendig. Der Wechsel von EC2 zu Fargate erfordert lediglich die Änderung des Launch-Types in bestehenden Task Definitions – ohne Code- oder Architektur-Anpassungen. Sie zahlen dabei pro Sekunde für tatsächlich laufende Container-Zeit statt für reservierte Serverkapazität.
Fargate eignet sich für verschiedene Anwendungsfälle: Bei neuen Container-Projekten ohne vorhandene EC2-Infrastruktur unterstützt der Dienst effektiv un- vorhersagbare Workloads mit sporadischen Lastspitzen und ermöglicht flexible Entwicklungs- und Testumgebungen mit häufigen Deployments. Teams ohne Infrastrukturexpertise können sich dabei auf die Anwendungsentwicklung konzentrieren. Fargate eignet sich außerdem für Microservices mit unterschiedlichen Ressourcenanforderungen.
Der EC2 Launch Type hingegen empfiehlt sich in anderen Szenarien. Er ist die bessere Wahl bei bereits bestehender EC2-Infrastruktur, die optimal ausgelastet werden soll. Wenn Sie spezielle Hardwareanforderungen wie GPU-Instanzen oder große Memory-Instanzen benötigen, ist EC2 ebenfalls vorzuziehen. Auch für langfristig konstante Workloads mit vorhersagbarer Auslastung und in Fällen, wo maximale Kostenkontrolle bei hoher, kontinuierlicher Cluster-Nutzung erforderlich ist, bietet der EC2 Launch Type Vorteile.
Fargate kommt mit vordefinierten CPU/ Memory-Kombinationen von 0,25 vCPU mit 512 MByte RAM bis vier vCPU mit 30 GByte Arbeitsspeicher. Die Abrechnung erfolgt pro Sekunde für tatsächlich laufende Tasks, was bei sporadischen Workloads erhebliche Kosteneinsparungen ermöglicht. Jeder Fargate-Task erhält automatisch eine dedizierte ENI mit VPC-Integration für vollständige Netzwerkisolation.
Lokale Container einbinden
ECS Anywhere erweitert die bewährten ECS-Funktionalitäten auf Ihre eigene Infrastruktur. Dieser Hybrid-Clouddienst ermöglicht die Verwaltung von Cloud- und On-Premises-Containern über dieselbe AWS-Konsole, ohne die Notwendigkeit kostspieliger AWS-Outposts. Seine Anwendungsszenarien umfassen:
- Complianceanforderungen: Sensible Daten müssen aus rechtlichen Gründen im eigenen Rechenzentrum verbleiben.
- Edge Computing: Latenz-kritische Anwendungen erfordern lokale Container-Ausführung.
- Schrittweise Cloudmigration: Hybride Architekturen für die Transformation.
Um nun ECS um ECS Anywhere zu erweitern, gilt es zunächst, die Systemvoraussetzungen zu validieren. Sie benötigen einen Linux-Server (mindestens Ubuntu 18.04 oder Amazon Linux 2) mit Docker (optional, nur für externe Instanzen). Dazu kommt Ihr bestehender ECS-Cluster (der zuvor angelegte), eine Internetverbindung (HTTPS/443 für externe Server) sowie IAM-Berechtigungen für ECS, SSM und EC2.
Die Implementierung erfolgt in vier Schritten. Im ersten bereiten Sie den Hybrid-Cluster vor. Dazu navigieren Sie in der ECS-Konsole zu "Cluster erstellen" und vergeben einen Namen, zum Beispiel "Hybrid-Cluster". Bei "Kapazitätsanbieter" wählen Sie "EC2" mit "On-demand" oder "Spot ASG" aus und klicken auf "Erstellen". Anschließend finden sich unter Infrastruktur die Einträge der Kapazitätsanbieter und im Gegensatz zu Schritt 1 auch den Infra-ECS-Cluster-Hybrid (Bild 3).
Bild 3: Der erste Schritt der ECS-Implementierung besteht darin – wie im Bild bereits erfolgt – den Hybrid-Cluster anzulegen.
In Schritt zwei müssen Sie Registrierungsschlüssel generieren. Dies erfolgt unter "Cluster / Infrastruktur / Registrieren externer Instanzen", wo Sie die Aktivierungsdauer auf "30 Tage (Maximum)" und die Instanzanzahl auf "5" setzen (dieser Wert eignet sich für kleine Umgebungen). Nun lassen Sie den Installationsbefehl (als Skript) generieren und klicken danach auf "Kopieren".
Derartig ausgestattet geht es an die Agenteninstallation, in dem Sie das Skript direkt auf dem lokalen Server ausführen (per SSH-Verbindung mit sudo-Rechten):
Das Installationsskript konfiguriert automatisch den Systems Manager Agent für Remotemanagement, den ECS Container Agent für Container-Orchestrierung und die sichere Kommunikation mit AWS-APIs über TLS.
Im vierten und letzten Schritt validieren Sie das Hybrid-Deployment. Dazu navigieren Sie in der ECS-Konsole zu "Cluster / Infrastruktur / Container-Instanzen". Dort sind neue externe Instanzen sichtbar und weisen den Status "Aktiv" auf. Zudem erhalten Sie eine Ressourcenübersicht (CPU, Memory, Netzwerk) und CloudWatch-Logs sind automatisch verfügbar.
Für das Bereitstellen auf lokaler Hardware nutzen Sie Placement-Constraints:
"placementConstraints": [
{
"type": "attribute:ecs.instance-type",
"expression": "external"
}
]
Diese Konfiguration stellt sicher, dass Tasks ausschließlich auf Ihren lokalen Servern ablaufen, während die Verwaltung über die AWS-Konsole erfolgt.
Monitoring von ECS
ECS integriert sich in CloudWatch und bietet so automatische Metriken für CPU, Memory, Netzwerk und Disk-I/O auf Task-Ebene. Container Insights erweitert diese Grundfunktionalität um das erweiterte Überwachen mit strukturierten Logs und Performancedashboards.
Um Container zu Insights zu aktivieren, gehen Sie in der ECS-Konsole auf "Kontoeinstellungen" und setzen die "Cloud-Watch Insights" auf "Container Insights" oder "Container Insights mit verbesserter Beobachtbarkeit". Und schon sind die vordefinierten Dashboards verfügbar.
Fazit
ECS integriert sich nahtlos in vorhandene AWS-Umgebungen und unterstützt schrittweise Modernisierungsstrategien. Die Kombination aus AWS-Services und Containern ermöglicht es IT-Verantwortlichen, ECS als zentrale Container-Plattform zu etablieren.
(jp)
Christopher Henkel und Kay-Michael Kroedel sind Solutions Architects bei AWS