Ich habe eine Cloud-Formationsvorlage, die ich eine Wartebedingung einrichten, um ein Signal zu erhalten, wenn das Benutzerdatenskript beendet, um auszuführen. Das funktioniert perfekt!
Jetzt verwende ich cfn-hup, um meine Anwendung mit einer neuen Version zu aktualisieren. Ich aktualisiere den Stack mit einem neuen Parameter und einem Skript lade die neue Version herunter und installiere sie auf dem Server. Aber da ich die Wartezustandsressource nicht aktualisiere, wird sie nicht neu erstellt und wartet nicht bis zum Signal. Gibt es sowieso, um die Wiederherstellung der Wartezustandsressourcen zu erzwingen?
Gute Frage. Ich habe selbst nach einer Lösung gesucht, es scheint jedoch, dass dies nicht möglich ist. Von einer Re: Invent-Sitzung 2013:
- cfn-hup kann nicht mit dem CloudFormation-Workflow interagieren
- Workflow wartet nicht auf cfn-hup
- cfn-hup kann den Workflow nicht abbrechen
- cfn-hup kann keine Daten in den Stapel
einfügen
Quelle: Ссылка
"Wenn cfn-hup abstürzt und brennt und kläglich scheitert, ist die CloudFormation Workflow sagt Update abgeschlossen. "
Quelle: Ссылка
Um eine Anwendung mit CloudFormation zu aktualisieren, aktualisieren Sie Daten im Abschnitt "Metadata" eines Instance- oder LaucnConfig-Elements. In Ihrem Fall ändern Sie den Wert eines Parameters, auf den im Abschnitt "Metadaten" verwiesen wird. Ich vermute, dass eine "Quelle" aktualisiert wird? Ein Cron-Job für Ihre Instanz (en) wird so eingestellt, dass er cfn-hup ausführt. Wenn dies der Fall ist, liest er die Informationen im CloudFormation-Stack und sieht, dass sie sich geändert haben. Dann führt es die in der Datei hooks.conf angegebenen Aktionen aus (oder die in Dateien im Verzeichnis hooks.d angegebenen), die normalerweise cfn-init ausführen sollen. Der Befehl cfn-init ruft alle Dateien aus den angegebenen Quellen ab und führt alle Befehle aus, die im Abschnitt "Metadaten" angegeben sind. Das Ergebnis ist eine aktualisierte App.
Damit die Wartebedingung "reaktiviert", müsste etwas dazu sagen, was ich übrigens nicht für möglich halte. Da das einzige, was Sie ändern, Instanzmetadaten sind und alle Aktionen lokal in der Instanz ablaufen, glaube ich nicht, was Sie versuchen zu tun. Eine neue Wartebedingung müsste erstellt und durch das cfn-Signal signalisiert werden (welches ich in hooks.conf ansprechen müsste, glaube ich). Ein interessantes Szenario: Was passiert, wenn Folgendes passiert: Sie benennen die Wartebedingung um und ändern die Metadaten für das Update. Die Instanz gibt kein vollständiges Signal aus und CloudFormation setzt die Vorlage in den vorherigen Status zurück. Beim nächsten Aufruf von cfn-hup sieht die Instanz, dass sich der Stack geändert hat, aber die Reversion bleibt hängen und kann nicht vollständig abgeschlossen werden. Würden wir in einer Endlosschleife stecken bleiben?
Danke für das Teilen, ich stieß auf das ähnliche Problem, und ich habe meine eigene Workaround erstellt, auch wenn es nicht nett ist, aber ich bin glücklich, es hier zu teilen:
Das Schlüsselproblem ist hier, dass cfn-hup
asynchron läuft und es keine Möglichkeit gibt, es zurück in die Cloud zu bringen.
Hier ist meine Lösung:
- Als Teil von cfn-auto-reload.conf
,
- Wir rufen den cfn-init
cmd auf, um den Stapel zu aktualisieren,
- und wir verwenden ein anderes Skript, um den Exit-Code von cfn-init
cmd und die Version der installierten App zu erfassen,
- Dann lege sie in eine Datei auf S3.
nicht elegant, aber es funktioniert:)
Tags und Links amazon-web-services amazon-cloudformation