Ich weiß, dass dies ein alter Thread ist, aber die Lösung ist viel einfacher, als die meisten Antworten hier vermuten lassen.
So aktualisieren Sie den laufenden Container in zwei Schritten:
Im Folgenden wird davon ausgegangen, dass ein Dienst eine Aufgabe latest
ausführt, die auf einen Container mit Tags verweist (oder auf ein anderes statisches Tag, das sich nicht auf Containeraktualisierungen bezieht).
- Laden Sie Ihren neuen Container in das Repository hoch
- Töte deine Aufgaben manuell
Wenn es unser Ziel ist, ein neues Gebäude in die Wildnis zu bringen, müssen wir uns nicht wirklich auf unseren Service verlassen (und ich würde argumentieren, wir sollten uns nicht darauf verlassen). Wenn Sie Ihre Aufgabe beenden, erkennt der Dienst, dass keine Desired Count
Aufgaben ausgeführt werden, und startet einfach eine neue Aufgabe. Dies löst ein erneutes Ziehen Ihres Containers basierend auf demselben Tag aus.
ECS-Dienste sind ein HA-Sicherheitsnetz und kein Ersatz für Ihre CD / CI-Pipeline.
Bonus: Wenn das Ziel ist, dass ein Dienst erkennt, dass ein neuer Container verschoben wurde (unabhängig von Tags), müssen wir die Auswirkungen berücksichtigen. Wollen wir wirklich einen Basisdienst, der unsere Bereitstellungspipeline für uns steuert? Wahrscheinlich nicht. Im Idealfall werden Sie Ihre Container mit verschiedenen Tags versehen (basierend auf Release-Versionen oder Ähnlichem). In diesem Fall besteht das Hindernis für die Bereitstellung darin, dass der Dienst über etwas Neues informiert werden muss - wiederum ist dies ein Sicherheitsnetz für den Dienst und nicht mehr.
So stellen Sie neue Tags in drei Schritten bereit:
- Laden Sie Ihr neues
container:tag
in das Repository hoch
- Erstellen Sie eine neue Aufgabendefinition, die auf die neue verweist
tag
- Aktualisieren Sie Ihren Service, um auf die neue Aufgabendefinition zu verweisen
- Vorsicht hier! Wenn Sie
minimum healthy
festlegen , 0%
wie einige andere Antworten vorschlagen, sind Sie AWS volle Autorität geben Ihren gesamten Service zu töten , um die neue Aufgabendefinition zu implementieren. Wenn Sie eine fortlaufende / schrittweise Bereitstellung bevorzugen, stellen Sie Ihr Minimum auf etwas ein >0%
.
- Stellen Sie alternativ "
minimum healthy
to" 100%
und "your maximum healthy
to" so ein >100%
, dass Ihr Dienst die neuen Aufgaben bereitstellen kann, bevor die alten beendet werden (um die Auswirkungen auf Ihre Benutzer zu minimieren).
Ab diesem Zeitpunkt erkennt Ihr Service automatisch, dass Sie eine neue Aufgabe angegeben haben, und arbeitet daran, diese Aufgabe basierend auf den von Ihnen konfigurierten Schwellenwerten für minimum
/ funktionsfähig bereitzustellen maximum
.