ECS auf EC2-Cluster-Basis provisioniere Amazon Elastic Container Service, Teil 2 – Praxis

Docker-Image, Container, Cluster, Container-Definition, Cluster-Manager, Task-Definition, Task, Service-Definition und Services sind die essenziellen Konzepte von ECS. Schauen wir uns nun an, wie man aus diesen Zutaten eine cloudnative App backt.

Provisioniert man ECS mit Hilfe des Einrichtungsassistenten in der AWS Management Console, werden die geschilderten Zusammenhänge sehr schön visualisiert:

Wir wollen allerdings nun eine App auf ECS schrittweise auf Basis eines EC2-Clusters provisionieren, statt im Wizard auf Fargate-Basis. Als Beispiel verwenden wir den Sinatra-Service (Sinatra ist eine populäre Ruby-On-Rails-Alternative) von „tongueroo“, der auf dem Docker Hub zu finden ist und nicht weiter tut, als „die elementare Frage des Lebens“ Das Erstellen des Clusters in der Management-Console geht schnell von der Hand. Hier genügt im ECS-Dashboard im Abschnitt „Clusters“ ein Klick auf „Create Cluster“. AWS stellt hierzu drei verschiedene Templates „Networking only“, „EC2 Linux + Networking“ und „EC2 Windows + Networking“ bereit; wir entscheiden uns für die Linux-Variante.mit „42“ zu beantworten.

Die erste Herausforderung bestünde nun darin, das Image auf der Elastic Container Registry (ECR) bereitzustellen, was aus Sicherheitsgründen durchaus zu empfehlen wäre. Wir behandeln diesen Punkt im nächsten Teil und beschränken uns hier darauf, in der Task-Definition das Docker-Repo zu verwenden. Der prinzipielle Ablauf zum Bereitstellen einer App auf ECS wäre dann
  • 1. Erstellen des Clusters
  • 2. Erstellen einer Task-Definition
  • 3. Konfigurieren des Service
  • 4. Konfigurieren des Clusters
  • 5. Starten der Ressourcen

Erstellen des Clusters

Das Erstellen des Clusters in der Management-Console geht schnell von der Hand. Hier genügt im ECS-Dashboard im Abschnitt „Clusters“ ein Klick auf „Create Cluster“. AWS stellt hierzu drei verschiedene Templates „Networking only“, „EC2 Linux + Networking“ und „EC2 Windows + Networking“ bereit; wir entscheiden uns für die Linux-Variante.

Der ECS-Cluster-Assistent

Allerdings sollte man sich in der Praxis zunächst dem Thema Sicherheit widmen und neue Security-Groups für den Cluster erstellen, z. B. per Command Line Interface (CLI).

aws ec2 create-security-group –group-name ecs-sg –description ecs-sg

Andernfalls erstellt der Launch-Wizard passende Sicherheitsgruppen. In der Cluster-Konfiguration lassen sich dann die gewünschten, VPCs, Subnetze und Security-Groups verwenden.

Konfiguration des Cluster-Netzwerks

Das Ergebnis lässt sich dann umgehend inspizieren und bei Bedarf weiter konfigurieren. Die GUI spendiert jeden der im ersten Teil beschriebenen Komponenten einen eigenen Tab: Services, Tasks, EC2 Instances, Metrics, Scheduled Tasks usw.

Es kann ein paar Minuten dauern, bis die Instanzen im Cluster registriert sind und im Tab „ECS Instances“ erscheinen. Für das Erstellen der Task-Definition stützen wir uns auf das erwähnte Sinatra-Docker-Image Tongueroo. Unter Praxisbedingungen würde man dies ggf. nun erst einmal lokal testen. Nun erstellen wir die Task-Definition direkt als JSON-File in einem beliebigen Editor:

{
   „family“: „sinatra-hi“,
   „containerDefinitions“: [
   {
      „name“: „web“,
      „image“: „tongueroo/sinatra:latest“,
      „cpu“: 256,
      „memoryReservation“: 256,
      „portMappings“: [
         {
            „containerPort“: 4567,
            „protocol“: „tcp“
         }
         ],
      „command“: [
         „ruby“, „hi.rb“
      ],
         „essential“: true
      }
   ]
}

 

Dann registrieren wir die Task-Definition in ECS mit:

aws ecs register-task-definition –cli-input-json file://task-definition.json

Diese sollte dann auch in der AWS Console unter dem Punkt „Task Definitions“ auftauchen.Nun er stellen wir den Load Balancer für unseren Service im gewünschten Subnet mit der passenden Security Group. Wir verwenden einen Advanced Load Balander (ALB) und müssen dazu eine Zielgruppe „target-group-ecs“ zum Registrieren der Instanzen festlegen. Als „Listener“ verwenden wir lediglich Port 80 zu Frontend und Backend. Das Registrieren der Instanzen im Load Balancer überspringen wir allerdings, da dies der Service-Scheduler erledigen wird.

Ein komplexer Service auf ECS erfordert einen Load Balancer.

Hier weiterlesen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.