Wie behebe ich den Fehler „X-Ressourcensignal (e) konnten innerhalb der angegebenen Dauer nicht empfangen werden“ in AWS CloudFormation?

Lesedauer: 5 Minute
0

In AWS CloudFormation erhalte ich die folgende Fehlermeldung: „Es konnten keine X-Ressourcensignale innerhalb der angegebenen Dauer empfangen werden.” Wie kann ich diesen Fehler beheben?

Kurzbeschreibung

Sie erhalten diesen Fehler, wenn eine Amazon Elastic Compute Cloud (Amazon EC2) -Instance, Auto Scaling-Gruppe oder WaitCondition in dem durch das CreationPolicy-Attribut angegebenen Zeitraum keine Erfolgssignale von einer oder mehreren Instances empfängt.

Dieser Fehler kann in einem der folgenden Szenarien auftreten:

  • Szenario 1: Das cfn-signal-Skript ist nicht auf einer oder mehreren Instanzen des AWS CloudFormation-Stacks installiert.
  • Szenario 2: Die AWS CloudFormation-Vorlage enthält Syntaxfehler oder falsche Werte.
  • Szenario 3: Der Wert der Timeout-Eigenschaft für das CreationPolicy-Attribut ist zu niedrig.
  • Szenario 4: Das CFN-Signal wird nicht von der Amazon EC2-Instance gesendet.

**Hinweis:**Die Problemlösungsszenarien für diesen Fehler gelten nur für AWS CloudFormation-Stacks, die mit Linux-Instances erstellt wurden. Die Szenarien gelten nicht für Windows-Instanzen. Weitere Informationen finden Sie unter So beheben Sie Probleme beim Erstellen von Stacks.

Behebung

Bevor Sie die Schritte in den Problembehebungsszenarien ausführen, setzen Sie die Option Rollback on Failure für Ihren AWS CloudFormation-Stack auf Nein.

Szenario 1: Das cfn-signal-Skript ist nicht auf einer oder mehreren Instanzen des AWS CloudFormation-Stacks installiert

Gehen Sie wie folgt vor, um zu bestätigen, dass das cfn-Signal-Skript auf der Instance installiert ist, die für das Senden von Signalen an AWS CloudFormation-Ressourcen konfiguriert ist:

  1. Stellen Sie mithilfe von SSH eine Verbindung zu Ihrer Linux-Instance her.

  2. Stellen Sie mit einem der folgenden Befehle sicher, dass das cfn-Signal-Skript installiert ist.

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob sich das cfn-signal-Skript in Ihrem Verzeichnis befindet:

$ sudo find / -name cfn-signal
/opt/aws/bin/cfn-signal
/opt/aws/apitools/cfn-init-1.4-30.amzn2/bin/cfn-signal

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob das AWS CloudFormation-Helper-Skriptpaket, das das cfn-signal-Skript enthält, installiert ist:

$ sudo rpm -q aws-cfn-bootstrap
aws-cfn-bootstrap-1.4-30.amzn2.noarch

**Wichtig:**Der obige Befehl funktioniert nur auf Distributionen, die den RPM-Paketmanager verwenden.

**Hinweis:**Standardmäßig sind AWS CloudFormation-Hilfsskripte auf Amazon Linux Amazon Machine Images (AMIs) installiert. Wenn die AWS CloudFormation-Hilfsskripts nicht installiert sind, finden Sie Anweisungen zur Installation in der Referenz zu CloudFormation-Hilfsskripten.

Szenario 2: Die AWS CloudFormation-Vorlage enthält Syntaxfehler oder falsche Werte

Gehen Sie wie folgt vor, um zu bestätigen, dass die UserData-Eigenschaft so konfiguriert ist, dass sie die durch das CreationPolicy-Attribut angegebenen AWS CloudFormation-Ressourcen signalisiert:

  1. Öffnen Sie in einem Code-Editor die AWS CloudFormation-Vorlage für Ihren Stack und suchen Sie dann den Eigenschaftsbereich UserData.

  2. Suchen Sie nach Fehlern, einschließlich Syntaxfehlern, fehlenden Leerzeichen, Rechtschreibfehlern und anderen Tippfehlern.

  3. Vergewissern Sie sich, dass die Werte für die Eigenschaften Stack, Ressource und Region korrekt sind.

**Hinweis:**Wenn Sie ein Bootstrap-Skript verwenden, das die Eigenschaft userData enthält und das cfn-signal-Skript aufruft, überprüfen Sie das Bootstrap-Skript auf Syntaxfehler oder falsche Werte.

Wenn Sie mit der cfn-init-Befehlstaste signalisieren, suchen Sie in den cfn-init-Logs nach Informationen über das Signal. Um in den Cloud-Init-Logs oder cfn-init-Logs nach Fehlern zu suchen, stellen Sie über SSH eine Verbindung zu Ihrer Amazon EC2-Instance her. Suchen Sie dann nach detaillierten Fehler- oder Fehlermeldungen, indem Sie in den folgenden Protokollen nach dem Schlüsselwort „Fehler“ oder „Fehler“ suchen:

/var/log/cloud-init-output.log
/var/log/cloud-init.log
/var/log/cfn-init.log
/var/log/cfn-init-cmd.log
/var/log/cfn-wire.log

Führen Sie den folgenden Befehl aus, um alle Vorkommen der Wörter „error“ oder „failure“ in einer /var/log/cfn- oder /var/log/cloud-init-Datei zu analysieren:

grep -ni 'error\|failure' $(sudo find /var/log -name cfn\* -or -name cloud-init\*)

**Hinweis:**Der vorherige Befehl gibt den Dateinamen, die Zeilennummer und die Fehlermeldung zurück.

Szenario 3: Der Wert der Timeout-Eigenschaft für das creationPolicy-Attribut ist zu niedrig

Der Wert der Timeout-Eigenschaft wird durch das CreationPolicy-Attribut definiert. Gehen Sie wie folgt vor, um zu überprüfen, ob der Wert hoch genug ist, damit Aufgaben ausgeführt werden können, bevor das cfn-Signal-Skript Signale an AWS CloudFormation-Ressourcen sendet.

**Wichtig:**Die folgenden Schritte funktionieren nur, wenn die Instance nicht beendet wurde (z. B. von einer Auto Scaling-Gruppe). Sie haben die Option Rollback on Failure Ihres AWS CloudFormation-Stacks bereits auf Nein gesetzt. Diese Option bedeutet, dass kein Fehler-Rollback stattfindet und die Instance erst beendet wird, wenn Sie den Stack löschen. Sie können über SSH eine Verbindung zur Instance herstellen und dann mit den folgenden Schritten zur Fehlerbehebung fortfahren.

  1. Öffnen Sie in einem Code-Editor die AWS CloudFormation-Vorlage für Ihren Stack und suchen Sie dann den Wert der Timeout-Eigenschaft.

**Hinweis:**Der Wert der Eigenschaft Timeout gibt die maximale Zeit an, während der AWS CloudFormation auf ein Signal wartet, bevor ein Fehler zurückgegeben wird.

  1. Um eine Schätzung zu erhalten, wann das cfn-Signal-Skript ausgelöst wird, stellen Sie über SSH eine Verbindung zur Instanz her und führen Sie dann den folgenden Befehl aus:
less /var/log/cfn-init.log

Die Protokolldatei zeigt einen Zeitstempel, wenn das SUCCESS-Signal an die AWS CloudFormation-Ressourcen gesendet wird. Siehe folgendes Beispiel:

2019-01-11 12:46:40,101 [DEBUG] Signaling resource EC2Instance in stack XXXX with unique ID i-045a536a3dfc8ccad and status SUCCESS

3.Öffnen Sie die AWS CloudFormation-Konsole.

  1. Um den Zeitstempel eines Ressourcenausfalls für das Ereignis „X-Ressourcensignal (e) konnten innerhalb der angegebenen Dauer nicht empfangen werden“ zu sehen, wählen Sie die Ansicht Ereignisse.

  2. Erweitern Sie unter Statusgrund die Zeile für das Ereignis mit dem Statusgrund „Innerhalb der angegebenen Dauer konnten keine X-Ressourcensignale empfangen werden. „

  3. Vergleichen Sie den Zeitstempel der Signalisierung mit dem Zeitstempel für den Ressourcenausfall.

**Hinweis:**Beachten Sie, dass das Signal gesendet wurde, nachdem die Amazon EC2-Ressource nicht erstellt werden konnte. Das Signal wird gesendet, bevor die Amazon EC2-Ressource erstellt wird oder kann nicht erstellt werden.

Szenario 4: Das CFN-Signal wird nicht von der Amazon EC2-Instance gesendet

Die SignalResource API ist nützlich, wenn Sie Signale von einem anderen Ort als von einer Amazon EC2-Instance senden möchten.

Sie können beispielsweise eine AWS Lambda-Funktion verwenden, um die SignalResource API aufzurufen und das Signal dann an den AWS CloudFormation-Stack zu senden. In einem solchen Szenario überprüfen Sie Ihre Lambda-Logs mit Amazon CloudWatch Logs. Diese Protokolle helfen Ihnen herauszufinden, warum das Signal nicht an den AWS CloudFormation-Stack gesendet wird.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr