Wie behebe ich den Fehler „Failed to receive X resource signal(s) within the specified duration“ in AWS CloudFormation?
Ich erhalte die folgende Fehlermeldung: „Failed to receive X resource signal(s) within the specified duration“ für Linux Amazon Elastic Compute Cloud (Amazon EC2)-Instances in AWS CloudFormation.
Kurzbeschreibung
Dieser Fehler wird angezeigt, wenn CloudFormation keine Erfolgssignale für Ressourcen empfängt, für die ein CreationPolicy-Attribut mit einem ResourceSignal angegeben ist. Der Fehler kann bei einer Amazon EC2-Instance, einer Auto-Scaling-Gruppe oder einer AWS::CloudFormation::WaitCondition auftreten.
Hinweis: Die folgende Problembehebung gilt nur für CloudFormation-Stacks, die du mit Linux-Instances erstellst. Informationen zu Windows-Instances findest du unter How do I resolve the error "Failed to receive X resource signal(s) within the specified duration" for EC2 Windows instances in AWS CloudFormation? (Wie behebe ich den Fehler „Failed to receive X resource signal(s) within the specified duration“ für EC2-Windows-Instances in AWS CloudFormation?).
Lösung
Verwende je nach Anwendungsfall die folgenden Schritte zur Fehlerbehebung, um das Problem zu lösen.
Hinweis: Um ein Stack-Rollback zu verhindern, wähle in der CloudFormation-Konsole die Option Beibehalten erfolgreich bereitgestellter Ressourcen für Optionen für Stack-Fehler. Diese Option bedeutet, dass es kein Fehler-Rollback gibt und die Instance erst beendet wird, wenn du den Stack löschst.
Das Skript „cfn-signal“ ist nicht auf der Instance des CloudFormation-Stacks installiert
Gehe 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 den Stack konfiguriert ist:
- Verbinden mit der Linux-Instance über einen SSH-Client.
- Verwende eines der folgenden Skripte, um zu bestätigen, dass das Skript „cfn-signal“ installiert ist.
Führe den folgenden Befehl aus, um zu überprüfen, ob sich das cfn-signal-Skript in dem Verzeichnis befindet:
Führe den folgenden Befehl aus, um zu überprüfen, ob das CloudFormation-Helper-Skriptpaket, das das cfn-signal-Skript enthält, installiert ist:$ sudo find / -name cfn-signal/opt/aws/bin/cfn-signal/opt/aws/apitools/cfn-init-1.4-30.amzn2/bin/cfn-sign
Wichtig: Der obige Befehl funktioniert nur auf Distributionen, die den RPM Package Manager (RPM, RPM-Paketmanager) verwenden. Weitere Informationen zum RPM-Paketmanager findest du in Chapter 1. Introduction to RPM (Kapitel 1. Einführung in RPM) auf der Red Hat-Website. Standardmäßig sind CloudFormation-Hilfsskripte auf Amazon Linux Amazon Machine Images (AMIs) installiert. Informationen zur Installation der Hilfsskripte findest du in der CloudFormation Referenz für Hilfsskripte.$ sudo rpm -q aws-cfn-bootstrapaws-cfn-bootstrap-1.4-30.amzn2.noarch
Die CloudFormation-Vorlage enthält Syntaxfehler oder falsche Werte
Gehe wie folgt vor, um die Fehler und falschen Werte zu finden:
- Öffne in einem Code-Editor die Vorlage für deinen Stack. Suche dann den Eigenschaftenabschnitt UserData.
- Suche nach Syntaxfehlern, fehlenden Leerzeichen, Rechtschreibfehlern und anderen Tippfehlern.
- Vergewissere dich, dass die Werte für die Eigenschaften Stack, Ressource und AWS-Region korrekt sind.
Hinweis: Überprüfe das Bootstrap-Skript, das in der Eigenschaft UserData enthalten ist. Das Script ruft cfn-signal auf. Prüfe, ob Syntaxfehler oder falsche Werte vorliegen.
Wenn du innerhalb der Befehle cfn-init signalisierst, suche in den Protokollen cfn-init nach Informationen über das Signal. Um in den Protokollen cloud-init oder cfn-init nach Fehlern zu suchen, verwende SSH, um eine Verbindung zu der Instance herzustellen. Verwende dann das Schlüsselwort error oder failure, um in den folgenden Protokollen nach detaillierten Fehler- oder Ausfallmeldungen zu 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ühre den folgenden Befehl aus, um Vorkommen der Wörter error oder failure in der Datei /var/log/cfn oder /var/log/cloud-init 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.
Der Wert der Timeout-Eigenschaft für das Attribut CreationPolicy ist zu niedrig
Das CreationPolicy-Attribut definiert den Wert der Eigenschaft timeout. Stelle sicher, dass der Wert hoch genug ist, um Aufgaben auszuführen, bevor das Skript cfn-signal Signale an CloudFormation-Ressourcen sendet.
Gehe wie folgt vor, um den Eigenschaftswert timeout zu überprüfen und die Zeitstempel für Signalisierung und Ressourcenausfall zu vergleichen:
- Öffne in einem Code-Editor die CloudFormation-Vorlage für deinen Stack, um den Eigenschaftswert timeout zu ermitteln.
**Hinweis:**Der Eigenschaftswert timeout ist die maximale Zeit, die CloudFormation auf ein Signal wartet, bevor es einen Fehler zurückgibt. - Um eine Schätzung darüber zu erhalten, wann das Skript cfn-signal aktiviert wurde, verwende SSH, um eine Verbindung zur Instance herzustellen. Führe dann den folgenden Befehl aus:
Die Protokolldatei zeigt einen Zeitstempel, wenn das Signal SUCCESS an die CloudFormation-Ressourcen gesendet wird.less /var/log/cfn-init.log - Öffne die CloudFormation-Konsole.
- Wähle die Ansicht Ereignisse aus.
- Wähle Statusgrund aus. Erweitere unter „Statusgrund“ die Zeile für das Ereignis mit dem Statusgrund „Failed to receive X resource signal(s) within the specified duration.“ (Innerhalb der angegebenen Dauer konnten keine X-Ressourcensignale empfangen werden).
- Vergleiche den Zeitstempel für das Signal mit dem Zeitstempel für den Ressourcenausfall.
Hinweis: Für einen erfolgreichen Abschluss muss das Skript das Signal senden, bevor die Instance erstellt wird oder nicht erstellt werden kann.
Das CFN-Signal wird nicht von der Instance gesendet
Stelle sicher, dass das Signal, das CloudFormation empfangen hat, von der Instance stammt. Prüfe das Protokoll „cfn wire“, das unter /var/log/cfn-wire.log verfügbar ist. Wenn die Antwort nicht 200 ist, liegt möglicherweise ein Verbindungsproblem zwischen der Instance und dem Endpunkt von CloudFormation vor.
Wenn du Signale von einem Ort sendest, der nicht die Instance ist, verwende die SignalResource-API. Du kannst beispielsweise eine AWS-Lambda-Funktion verwenden, um die SignalResource API aufzurufen und das Signal dann an den Stack zu senden. Wenn du eine Fehlermeldung erhältst, verwende CloudWatch-Protokolle, um die Lambda-Protokolle zu überprüfen und zu verstehen, warum das Signal nicht an den Stack gesendet wurde.
- Themen
- Management & Governance
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 2 Jahren
AWS OFFICIALAktualisiert vor 6 Monaten