Was ist der Unterschied zwischen einer Aufgabe und einem Service in AWS ECS?

113

Es scheint, dass man entweder eine Aufgabe oder einen Dienst basierend auf einer Aufgabendefinition ausführen kann. Was sind die Unterschiede und Gemeinsamkeiten zwischen Aufgabe und Dienst? Gibt es einen Hinweis darauf, dass man beim Erstellen einer Aufgabe "Aufgabengruppe" angeben kann, aber keinen Dienst? Sind Aufgabe und Dienst hierarchisch gleich Instanziierungen der Aufgabendefinition oder besteht Dienst aus Aufgaben?

Bob Jones
quelle

Antworten:

234

Eine Aufgabe Definition ist eine Sammlung von 1 oder mehr Container - Konfigurationen . Einige Aufgaben benötigen möglicherweise nur einen Container, während andere Aufgaben möglicherweise zwei oder mehr potenziell verknüpfte Container benötigen, die gleichzeitig ausgeführt werden. In der Aufgabendefinition können Sie angeben, welches Docker-Image verwendet werden soll, welche Ports verfügbar gemacht werden sollen, wie viel CPU und Speicher zugewiesen werden sollen, wie Protokolle erfasst und Umgebungsvariablen definiert werden sollen.

Eine Aufgabe wird erstellt, wenn Sie eine Aufgabe direkt ausführen, wodurch Container (in der Aufgabendefinition definiert) gestartet werden, bis sie gestoppt werden oder von selbst beendet werden. Zu diesem Zeitpunkt werden sie nicht automatisch ersetzt . Das direkte Ausführen von Aufgaben ist ideal für Jobs mit kurzer Laufzeit, möglicherweise als Beispiel für Dinge, die über CRON ausgeführt wurden.

Ein Service wird verwendet, um sicherzustellen, dass immer eine bestimmte Anzahl von Aufgaben ausgeführt wird . Wenn der Container einer Aufgabe aufgrund eines Fehlers beendet wird oder die zugrunde liegende EC2-Instanz fehlschlägt und ersetzt wird, ersetzt der ECS-Dienst die fehlgeschlagene Aufgabe. Aus diesem Grund erstellen wir Cluster, damit der Service über zahlreiche Ressourcen in Bezug auf CPU-, Speicher- und Netzwerkports verfügt. Für uns spielt es keine Rolle, auf welcher Instanz Aufgaben ausgeführt werden, solange sie ausgeführt werden. Eine Dienstkonfiguration verweist auf eine Aufgabendefinition. Ein Service ist für die Erstellung von Aufgaben verantwortlich .

Dienste werden normalerweise für Anwendungen mit langer Laufzeit wie Webserver verwendet. Wenn ich beispielsweise meine von Node.JS betriebene Website in Oregon (us-west-2) bereitstelle, möchte ich aus Gründen der Hochverfügbarkeit mindestens drei Aufgaben in den drei Verfügbarkeitszonen (AZ) ausführen. Wenn einer ausfällt, habe ich zwei weitere und der ausgefallene wird ersetzt (lesen Sie das als Selbstheilung !). Das Erstellen eines Dienstes ist der Weg, um dies zu tun. Wenn ich 6 EC2-Instanzen in meinem Cluster hatte, 2 pro AZ, verteilt der Dienst Aufgaben automatisch so gut wie möglich auf Zonen, wobei auch CPU-, Speicher- und Netzwerkressourcen berücksichtigt werden.

AKTUALISIEREN:

Ich bin mir nicht sicher, ob es hilfreich ist, diese Dinge hierarchisch zu betrachten.

Ein weiterer sehr wichtiger Punkt ist, dass ein Dienst für die Verwendung eines Load Balancers konfiguriert werden kann, sodass der Service beim Erstellen der Aufgaben, dh beim Starten der in der Aufgabendefinition definierten Container, die EC2-Instanz des Containers automatisch beim Load Balancer registriert. Aufgaben können nicht für die Verwendung eines Lastenausgleichs konfiguriert werden, sondern nur für Dienste.

talentierte mrjones
quelle
1
Vielen Dank @talentedmrjones! Ist es dann so einfach wie "Task für kurzfristige Jobs verwenden und Service für lang laufende Services verwenden"? Gibt es eine Möglichkeit, die Sie zu "Sind Aufgabe und Dienst hierarchisch gleich Instanzen der Aufgabendefinition oder besteht der Dienst aus Aufgaben?" Kommentieren können.
Bob Jones
Was ich nicht verstehe: Warum kann ich beim Erstellen einer Aufgabe Werte von Umgebungsvariablen ändern, aber es scheint nicht für den Service möglich zu sein
Nikolay Klimchuk
1
@ NikolayKlimchuk-Dienste verwalten nur die Aufgaben - es sind die Aufgaben selbst, die die Envars definieren und verwenden.
Bwobst
Was ist eine "Arbeitsgruppe"
red888
@ NikolayKlimchuk Entschuldigung für die späte Antwort. Services werden zum Planen von Containern verwendet, Aufgaben zum Definieren von Containern. Aus diesem Grund verwenden Sie die Aufgaben, um env vars zu steuern.
talentierte
42

Wunderschön erklärt in Worten von @talentedmrjones. Das Bild unten hilft Ihnen dabei, es einfach zu visualisieren :)

Cluster, Service, EC2-Instanz und Aufgabe in Aktion

realPK
quelle
Schöne Visualisierung! :-)
sgsi
2
Wenn ein Antwortbetrachter einen tiefen Einblick in Amazon ECS erhalten möchte, besuchen Sie bitte freecodecamp.org/news/… . Schön erklärt!
RealPK
@realPK sehr hilfreiche Seite in der Tat, danke für die Empfehlung!
Christophe
1

Aufgabendefinition:

Dies ist die Blaupause, die beschreibt, welche Docker-Container ausgeführt werden sollen, und die Ihre Anwendung darstellt. Es enthält mehrere Aufgaben.

Aufgabendefinition

Bedienung:

Eine Instanz der Aufgabendefinition. Außerdem werden die minimalen und maximalen Aufgaben aus einer zu einem bestimmten Zeitpunkt ausgeführten Aufgabendefinition, die automatische Skalierung und der Lastausgleich definiert.

ECS-Containerinstanzen:

Dies ist eine EC2-Instanz, auf der Docker und ein ECS Container Agent ausgeführt werden. Der Agent kümmert sich um die Kommunikation zwischen ECS und der Instanz, stellt den Status der Ausführung von Containern bereit und verwaltet die Ausführung neuer Container.

Beziehung:

Geben Sie hier die Bildbeschreibung ein

xwa130
quelle