Vor Kurzem stellte AWS AWS Fargate vor, einen Dienst, mit dem die Ausführung von Containern ohne Verwaltung von Servern oder Clustern möglich sein soll. Sollten Sie sich die letzten Jahre nicht taubgestellt haben, wissen Sie wahrscheinlich, dass Docker die Arbeitsweise von Entwicklern sowie einige Serverbetriebsweisen vollständig umgekrempelt hat.

Die Anwendung gestaltet sich jedoch noch immer sehr kompliziert und selbst, wenn man nur Container ausführt, muss man sich noch immer mit der Verwaltung der zugrundeliegenden Infrastruktur befassen. Und Sie wissen bestimmt schon, dass das kein Kinderspiel ist!

Hier zeigt sich AWS Fargate von seiner besten Seite: Es verfolgt das Ziel, für die Docker-Welt das zu werden, was EC2-Instanzen in den frühen Tagen der Cloud waren. Sie benötigen nur Ihr Docker-Image, müssen dann Speicher und CPU konfigurieren, Netzwerk und IAM-Richtlinien definieren und schon führt Fargate Ihren Container aus. All diese Dienste werden ressourcenbasiert und nach Sekunden abgerechnet. Einfacher gesagt als getan!

Voraussetzungen:

Ich werde mich auf die Ausführung des Containers konzentrieren, doch Fargate verfügt auch über eine native Integration mit der Amazon Virtual Private Cloud und Access Management (IAM). Sollten Sie also noch keinen VPC haben oder nicht den virtuellen Standard-PC ausführen wollen, müssen Sie zunächst einen eigenen konfigurieren. Außerdem müssen Sie prüfen, ob der Container mit der richtigen IAM-Rolle ausgeführt wird, die den Aufruf von AWS-APIs in Ihrem Namen gestattet.

Der HelloWorld-Test: Ausführen eines einzelnen Nuxeo-Containers

Folgen Sie diesen Schritten, wenn Sie, beispielsweise für eine Demo, schnell eine Nuxeo-Instanz aus dem Hut zaubern müssen.

Navigieren Sie in der AWS-Konsole zur ECS-Seite.

1. Neues Fargate-Cluster erstellen

(Ironischerweise widerspricht dieser erste Schritt dem Fargate-Motto "Führen Sie Container aus, ohne Server oder Cluster zu verwalten":)

  • Wählen Sie die Cluster-Vorlage und "Powered by Fargate" aus.
  • Legen Sie den Cluster-Namen fest und erstellen Sie einen neuen VPC für diesen Cluster, wenn Sie noch nicht über einen verfügen.

Neuen Fargate-Cluster erstellen 1

2. Neue Aufgabendefinition erstellen

  • Wählen Sie als Starttyp Fargate aus.
  • Legen Sie die passenden Ausführungsrollen fest. Ich entscheide mich in diesem Fall für die Basisrolle: ecsTaskExecutionRole.
  • Wählen Sie als Netzwerkmodus "awsvpc" aus. Alle mithilfe dieser Definition erstellten Aufgaben erhalten eine elastische Netzwerkschnittstelle, eine primäre private IP-Adresse und einen internen DNS-Hostnamen.
  • Konfigurieren Sie die Aufgabengröße: Aufgabenspeicher (GB) und Aufgaben-CPU (wird nach Sekunden abgerechnet).

Neuen Fargate-Cluster 2 erstellen

  • Erstellen Sie eine neue Container-Definition.

Neuen Fargate-Cluster 3 erstellen

Nun haben wir die Grundkonfiguration erstellt. Erweiterte Konfigurationsanweisungen finden Sie unter Erweiterte Aufgabendefinitionsparameter.

Möchten Sie dem Container Datenlaufwerke hinzufügen, wählen Sie Laufwerk hinzufügen aus. Ich habe bereits ein EBS-Laufwerk erstellt und werde als Beispiel den binären Speicher externalisieren, um dieses Laufwerk verwenden zu können.

Neuen Fargate-Cluster 4 erstellen

Nun müssen Sie zur Container-Definition zurückkehren und Nuxeo so konfigurieren, dass es dieses Laufwerk nutzt:

  • Bearbeiten Sie die Container-Definition und fügen Sie unter der erweiterten Container-Konfiguration die env-Variable NUXEO_BINARY_STORE hinzu.

Neuen Fargate-Cluster 5 erstellen

  • Konfigurieren Sie unter Speichern und Protokollieren einen Schnittpunkt für das zuvor festgelegte Laufwerk.

Neuen Fargate-Cluster 6 erstellen

  • Klicken Sie auf Erstellen, und Ihre Aufgabendefinition sollte nun auf der Aufgabendefinitionsseite erscheinen:

Neuen Fargate-Cluster 7 erstellen

####3. Ausführen einer neuen Aufgabe zur Instanziierung eines Containers aus der Aufgabendefinition oder Erstellung eines Dienstes

Am einfachsten lassen sich einzelne, unabhängige Container ausführen, indem die Aufgabe HelloWorld task ausgewählt wird. Wählen Sie aus dem Aktionsmenü RunTask aus.

Stellen Sie sicher, dass der in Schritt 1 erstellte Cluster ausgewählt ist, und konfigurieren Sie VPC und die Sicherheitsgruppen. Wählen Sie zudem für einen schnellen Zugriff auf die Instanz die Option für die automatische Zuweisung der öffentlichen IP-Adresse aus.

Neuen Fargate-Cluster 8 erstellen

Nach dem Klicken auf RunTask können Sie zurück zur Registerkarte cluster/tasks navigieren, in der Ihre Aufgabe zunächst als provisioning, pending (Bereitstellung, ausstehend) und schließlich running (wird ausgeführt) angezeigt wird. Klicken Sie auf die Aufgabe-ID in der Liste, um Details zur ausgeführten Aufgabe abzurufen und Zugriff auf die Protokolle zu erhalten.

Beachten Sie, dass Sie auch die Möglichkeit haben, einen Dienst zu erstellen, mit dem die gewünschte Anzahl Aufgaben, die aus Ihrer Aufgabendefinition erstellt wurde, gestartet und beibehalten wird. Somit können Sie Lastenausgleich und automatische Skalierung konfigurieren und rollierende Upgrades durchführen, wenn sich die Aufgabendefinition ändern sollte.

Neuen Fargate-Cluster 9 erstellen

Wie kann ich auf meine Nuxeo-Instanz zugreifen?

Mit dem in der Aufgabendefinition konfigurierten Netzwerkmodus "awsvpc" erhalten ECS-Aufgaben die gleichen Netzwerkeigenschaften wie Amazon-EC2-Instanzen. Falls Sie den Wert Auto Assign Public IP: ENABLED ausgewählt haben, ist Ihrer EIN bereits eine öffentliche IP-Adresse zugewiesen. Sie ist nur etwas schwierig zu finden, weil sie nicht in der Aufgabe angezeigt wird: Sie müssen von der Aufgabenbeschreibungsseite zur EIN navigieren.

Neuen Fargate-Cluster 10 erstellen

Mit der öffentlichen IP-Adresse sollte ich nun auf die laufende Nuxeo-Instanz zugreifen können, mir wird jedoch Folgendes ausgegeben:

curl http://54.175.225.0:8080/nuxeo/runningstatus

gibt Folgendes zurück:

curl: (7) Failed to connect to 54.175.225.0 port 8080: Operation timed out. (Fehler bei der Verbindung mit 54.175.225.0, Port 8080: Zeitüberschreitung.)

Das Problem ist, dass die der EIN zugewiesene Sicherheitsgruppe nicht standardmäßig eine Regel für Port 8080 enthält. Diese müssen Sie manuell hinzufügen:

Neuen Fargate-Cluster 11 erstellen

Danach folgen Grundlagenprüfungen:
curl http://54.175.225.0:8080/nuxeo/runningstatus
{"runtimeStatus":"ok","elasticSearchStatus":"ok","ldapDirectories":"ok","repositoryStatus":"ok"}

Nun kann ich auf meine Nuxeo-Instanz zugreifen:

Neuen Fargate-Cluster 12 erstellen

Wie aktualisiere ich meine Instanz, wenn ich ein neues Marketplace-Paket installieren möchte?

Im Moment läuft nur eine nackte Nuxeo-Instanz. Ich würde nun aber gerne auch die geniale Nuxeo WebUI bereitstellen.

Wenn Sie ein neues Marketplace-Paket hinzufügen möchten, müssen Sie eine neue Version der Aufgabendefinition erstellen und eine neue Aufgabe ausführen, um die bereits bestehende zu ersetzen.

  • Navigieren Sie zu den Aufgabendefinitionen, wählen Sie die Aufgabe "HelloWorld task" aus und erstellen Sie eine neue Aufgabenversion.
  • Aktualisieren Sie die Container-Definition so, dass die env-Variable NUXEO_PACKAGES weitergegeben wird.

Neuen Fargate-Cluster 13 erstellen

Sollten Sie eine individuelle Aufgabe ausführen, müssen Sie die laufende Aufgabe anhalten und mit der aktualisierten Version eine neue starten.

Sollten Sie Ihre Aufgabe in einem Service ausführen, können Sie den Dienst - abhängig davon, wie er konfiguriert wurde - aktualisieren, um ein rollierendes Upgrade durchzuführen.

Nach dem Anhalten der alten und Start der neuen Aufgabe läuft Nuxeo nun wieder:

Neuen Fargate-Cluster 14 erstellen

Fazit

Fargate erspart uns zwar die Verwaltung von Clustern, ist aber - wie auch andere ECS-Konfigurationen - kompliziert einzurichten. Es kann also eine Menge Arbeit bedeutet, Container zum Laufen zu bringen.