Zum Inhalt

43 AWS ECS mit Console

Zielsetzung

Sie erstellen einen Amazon Elastic Container Service Cluster, erstellen eine Task Definition sowie einen Service, um Ihre Container im Internet bereitzustellen.

Konzept

Amazon Elastic Container Service (ECS) ist vergleichbar mit Kubernetes, Docker Swarm, oder Azure Container Service. ECS unterstützt zwei unterschiedliche Betriebsmodelle:

  • Fargate: Diese Option ist serverless - Sie können Container betreiben, ohne dass Sie Ihre Infrastruktur verwalten müssen. Geeignet für kleine Applikationen, Applikationen mit kurzzeitig hohen Lasten oder schnell wechselnden Lasten.
  • EC2: Sie konfigurieren EC2-Instanzen (Virtuelle Machinen) in Ihrem Cluster und stellen diese bereit, um Ihre Container auszuführen. Geeignet für Applikationen mit konstant hoher CPU und Speichernutzung, Preisoptimierung oder Applikationen mit hohem Speicherbedarf.

Info

Für diesen Auftrag verwenden wir den serverless Ansatz mit Fargate. AWS ECS übernimmt hier die Installation von Containern, die Skalierung, die Überwachung und die Verwaltung sowohl über eine API als auch über die AWS Management Console. Die spezifische Maschine, auf der ein Container läuft, und die Wartung aller Instanzen werden von der Plattform übernommen. Wir müssen uns nicht darum kümmern. Dieser Service kostet - die Frage stellt sich, ob AWS ihn teurer oder günstiger als wir anbieten kann.

Task Definition

Die Task Definition (Aufgabenbeschreibung) ist eine Vorlage, die beschreibt, welche Docker-Container ausgeführt werden sollen. In unserem Beispiel ist dies der nginx-custom Container. Die Task Definition beschreibt die zu verwendenden Images, die nötige CPU Rechenleistung, Speicher, die Umgebungsvariablen, die freizugebenden Ports und die Interaktion der Container.

Task

Aus einer Task Definition können Instanzen gestartet werden, welche die Container gemäss dieser Konfiguration beinhaltet. Aus einer Task Definition können beliebig viele identische Tasks (Aufgaben) erstellt werden.

Service

Der Service definiert die minimale und maximale Anzahl von Tasks einer Task Definition, die zu einem bestimmten Zeitpunkt ausgeführt werden, sowie die automatische Skalierung und das Loadbalancing.

Falls die CPU durch den einzigen laufenden Task ausgelastet ist, kann der Service automatisch zusätzliche Tasks hinzufügen. Es erlaubt zudem die maximale Anzahl der Tasks zu begrenzen, die ausgeführt werden können. Dies hilft, die Kosten von AWS unter Kontrolle zu halten.

Cluster

Der Service muss seine Tasks nun irgendwo ausführen können, damit sie zugänglich sind. Er muss einem Cluster zugeordnet werden und der Containerverwaltungsdienst sorgt selbstständig dafür, dass er genügend ECS-Instanzen für Ihren Cluster bereitstellt.

Umsetzung

  1. In der AWS Management Console, suchen Sie den Service Elastic Container Service image-20230328111818801

  2. Erstellen Sie unter Cluster mit Create cluster einen neuen Cluster. Verwenden Sie als Cluster name fargate-cluster image-20230403161231204

    Regionsbeschränkungen Learner Lab

    Alle Services im AWS Academy Learner Lab sind auf die Regionen us-east-1 und us-west-2 beschränkt. Verwenden Sie nur diese Regionen.

    There was an error while retrieving a list of namespaces

    Amazon hat die Funktionalität Namespaces eingeführt. Das Learner Lab hat diese Neuerungen noch nicht in ihr Rechtemodell eingebaut, weshalb wir die benötigten ListNamespaces-Rechte noch nicht besitzen. Für unseren ECS Cluster verwenden wir *keine Namespaces - Sie können den Fehler deshalb ignorieren.

  3. Wählen Sie links im Menü Task definitions und erstellen Sie eine neue Task Definition mittels Create new task definition. Verwenden Sie nginx-custom als Cluster name und als Image URI Ihre persönliche URL zum privaten Repository aus dem Abschnitt Elastic Container Registry (Beispiel: 12345EXAMPLE.dkr.ecr.us-east-1.amazonaws.com/nginx-custom:latest) image-20230328225653495

  4. Nachdem Sie mittels Next zum Teil Configure environment, storage, monitoring, and tags gelangt sind, stellen Sie sicher, dass Sie unter Environment AWS Fargate (serverless) verwenden, setzen Sie CPU auf .25 vCPU und Memory auf .5 GB. image-20230328225952160

    LabRole

    Task role und Task execution role müssen zwingendermassen auf LabRole gestellt werden, Sie erhalten sonst Fehlermeldungen und der Cluster kann nicht erstellt werden.

  5. Wählen Sie links im Menü Cluster und erstellen Sie einen neuen Service.

    image-20230328230140030

  6. Als Compute options wählen Sie Launch type und belassen die restlichen Voreinstellungen.

    image-20230328230553080

  7. Application type muss ein Service sein. Bei Task definition wählen Sie unter Family die zuvor erstellte Task definition nginx-custom mit Revision latest. Desired tasks ist in unserem Fall 1.

    image-20230328230854487

  8. Erstellen Sie eine neue Security Group mit dem Namen fargate-service und einer Beschreibung. Erlauben Sie Type HTTP und Source Anywhere.

    image-20230328231146193

    Optional

    Alternativ können Sie auch die Default Security Group verwenden. Erstellen Sie anschliessend im VPC Dashboard die nötige zusätzliche Inbound Rule.

  9. Erstellen Sie den Service nun mittels Create und warten bis der Service deployed wurde. Sie finden Ihre Public-IP-Adresse, indem Sie den Service fargate-service wählen, in den Tab Configuration and tasks wechseln und dort den Task auswählen. Im Bereich Configuration wird Ihre Public-IP-Adresse angezeigt. Testen Sie, ob der Container läuft.

    image-20230328231304257

Zusammenfassung

Sie haben auf einer öffentlichen IP eine Instanz Ihres nginx-custom Images bereitgestellt. Dazu haben Sie in AWS einen Elastic Container Service Cluster, die Task Definition und einen Service erstellt.