Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Wartebedingungen in einer CloudFormation Vorlage erstellen
Wichtig
Für Amazon EC2 - und Auto Scaling Scaling-Ressourcen empfehlen wir, anstelle von Wartebedingungen ein CreationPolicy Attribut zu verwenden. Fügen Sie diesen Ressourcen ein CreationPolicy Attribut hinzu und verwenden Sie das cfn-signal-Hilfsskript, um zu signalisieren, dass ein Instance-Erstellungsprozess erfolgreich abgeschlossen wurde.
Weitere Informationen finden Sie unter CreationPolicy Attribut oder Anwendungen auf Amazon bereitstellen EC2.
Mit der AWS::CloudFormation::WaitConditionHandle
-Ressource und dem CreationPolicy Attribut-Attribut können Sie die folgenden Aufgaben ausführen:
-
Koordinieren der Erstellung von Stack-Ressourcen mit anderen Konfigurationsaktionen, die sich zur Stack-Erstellung extern verhalten
-
Verfolgen des Status eines Konfigurationsvorgangs
Sie können z. B. die Erstellung einer anderen Ressource beginnen, nachdem eine Anwendungskonfiguration teilweise abgeschlossen ist, oder während eines Installations- und Konfigurationsvorgangs Signale senden, um dessen Fortschritt zu überwachen.
Verwenden eines Wartebedingungs-Handles
Anmerkung
Wenn Sie die VPCEndpunktfunktion verwenden, müssen Ressourcen in den, VPC die auf Wartebedingungen reagieren, Zugriff auf haben AWS CloudFormation-spezifische Amazon Simple Storage Service (Amazon S3) -Buckets. Ressourcen müssen Antworten auf Wartebedingungen an ein vorsigniertes Amazon S3 URL senden. Wenn sie keine Antworten an Amazon S3 senden können, AWS CloudFormation erhält keine Antwort und der Stack-Vorgang schlägt fehl. Weitere Informationen finden Sie unter Zugriff CloudFormation über einen Schnittstellenendpunkt (AWS PrivateLink) Beispiel für Bucket-Richtlinien für VPC Endgeräte für Amazon S3.
Sie können die Wartebedingung und das Wartebedingungs-Handle verwenden, um AWS CloudFormation unterbrechen Sie die Erstellung eines Stacks und warten Sie auf ein Signal, bevor der Stack weiter erstellt wird. Beispielsweise möchten Sie möglicherweise Anwendungen auf eine EC2 Amazon-Instance herunterladen und konfigurieren, bevor Sie die Erstellung dieser EC2 Amazon-Instance als abgeschlossen betrachten.
Die folgende Liste enthält eine Zusammenfassung der Funktionsweise einer Wartebedingung mit einem Wartebedingungs-Handle:
-
AWS CloudFormation erzeugt wie jede andere Ressource eine Wartebedingung. Wann AWS CloudFormation erstellt eine Wartebedingung, meldet den Status der Wartebedingung als CREATE _IN_ PROGRESS und wartet, bis die erforderliche Anzahl von Erfolgssignalen empfangen wird oder die Zeitüberschreitung der Wartebedingung abgelaufen ist. Wenn AWS CloudFormation empfängt die erforderliche Anzahl von Erfolgssignalen, bevor der Timeout-Zeitraum abläuft, und setzt die Erstellung des Stacks fort. Andernfalls setzt es den Status der Wartebedingung auf und setzt den Stack zurück
CREATE_FAILED
. -
Die
Timeout
Eigenschaft bestimmt, wie lange AWS CloudFormation wartet auf die erforderliche Anzahl von Erfolgssignalen.Timeout
ist eine Eigenschaft, die an das Minimum gebunden ist. Das bedeutet, dass das Timeout frühestens zu dem von Ihnen angegebenen Zeitpunkt eintritt, aber auch kurz danach eintreten kann. Die maximale Zeit, die Sie angeben können, ist 43200 Sekunden (12 Stunden). -
Normalerweise möchten Sie, dass eine Wartebedingung unmittelbar nach der Erstellung einer bestimmten Ressource beginnt, z. B. einer EC2 Amazon-Instance, RDS DB-Instance oder Auto Scaling Scaling-Gruppe. Dazu fügen Sie das Attribut DependsOn einer Wartebedingung hinzu. Wenn Sie ein
DependsOn
-Attribut einer Wartebedingung hinzufügen, geben Sie an, dass die Wartebedingung erst erstellt wird, nachdem die Erstellung einer bestimmten Ressource abgeschlossen ist. Wenn die Wartebedingung erstellt wird, AWS CloudFormation beginnt den Timeout-Zeitraum und wartet auf Erfolgssignale. -
Das Attribut
DependsOn
können Sie auch für andere Ressourcen verwenden. Beispielsweise möchten Sie möglicherweise, dass zuerst eine RDS Amazon-DB-Instance erstellt und eine Datenbank auf dieser DB-Instance konfiguriert wird, bevor Sie die EC2 Instances erstellen, die diese Datenbank verwenden. In diesem Fall erstellen Sie eine Wartebedingung mit einemDependsOn
Attribut, das die DB-Instance spezifiziert, und Sie erstellen EC2 Instance-Ressourcen mitDependsOn
Attributen, die die Wartebedingung spezifizieren. Dadurch würde sichergestellt, dass die EC2 Instances erst unmittelbar nach Abschluss der DB-Instance und der Wartebedingung erstellt werden. -
AWS CloudFormation muss eine bestimmte Anzahl von Erfolgssignalen für eine Wartebedingung empfangen, bevor der Status dieser Wartebedingung auf
CREATE_COMPLETE
Fortsetzung der Erstellung des Stacks gesetzt wird. Die EigenschaftCount
der Wartebedingung gibt die Anzahl der Erfolgssignale an. Wenn keine festgelegt ist, ist der Standardwert 1. -
Eine Wartebedingung erfordert ein Wartebedingungs-Handle, um eine vorsignierte Bedingung einzurichtenURL, die als Signalmechanismus verwendet wird. URLMit dem Vorsignierten können Sie ein Signal senden, ohne Ihr Signal angeben zu müssen AWS Anmeldeinformationen. Sie verwenden dieses Vorzeichen, URL um Erfolg oder Misserfolg zu signalisieren, was in einer Anweisung zusammengefasst ist. JSON Das Format dieser JSON Anweisung finden Sie unter. JSONFormat des Wartezustandssignals
-
Wenn eine Wartebedingung die erforderliche Anzahl von Erfolgssignalen (wie in der Eigenschaft Count definiert) empfängt, bevor der Timeout-Zeitraum abläuft, AWS CloudFormation markiert die Wartebedingung als
CREATE_COMPLETE
und setzt die Erstellung des Stacks fort. Andernfalls AWS CloudFormation schlägt die Wartebedingung fehl und setzt den Stack zurück (z. B. wenn der Timeout-Zeitraum ohne die erforderlichen Erfolgssignale abläuft oder wenn ein Fehlersignal empfangen wird).
So verwenden Sie eine Wartebedingung in einem Stack:
-
Deklarieren Sie eine
AWS::CloudFormation::WaitConditionHandle
-Ressource in der Vorlage des Stacks. Ein Wartebedingungs-Handle hat keine Eigenschaften. Ein Verweis auf eineWaitConditionHandle
Ressource führt jedoch zu einem vordefinierten Wert, den Sie verwenden könnenURL, um dem den Erfolg oder Misserfolg zu signalisieren.WaitCondition
Beispielsweise:"myWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle", "Properties" : { } }
-
Deklarieren Sie eine
AWS::CloudFormation::WaitCondition
-Ressource in der Vorlage des Stacks. EineWaitCondition
Ressource hat zwei erforderliche Eigenschaften: SieHandle
ist ein Verweis auf eine in der VorlageWaitConditionHandle
deklarierte Eigenschaft undTimeout
entspricht der Anzahl Sekunden für AWS CloudFormation zu warten. Sie können optional dieCount
Eigenschaft festlegen, die die Anzahl der Erfolgssignale bestimmt, die die Wartebedingung zuvor erhalten muss AWS CloudFormation kann mit der Erstellung des Stacks fortfahren.Um zu steuern, wann die Wartebedingung ausgelöst wird, legen Sie ein
DependsOn
-Attribut für die Wartebedingung fest. EineDependsOn
-Klausel ordnet eine Ressource der Wartebedingung zu. Nach AWS CloudFormation erstellt dieDependsOn
Ressource und blockiert die weitere Erstellung von Stack-Ressourcen, bis eines der folgenden Ereignisse eintritt: a) der Timeout-Zeitraum läuft ab b) Die erforderliche Anzahl von Erfolgssignalen wird empfangen c) Ein Fehlersignal wird empfangen.Hier folgt ein Beispiel für eine Wartebedingung, die nach der erfolgreichen Erstellung der Ressource
Ec2Instance
beginnt, die RessourcemyWaitHandle
alsWaitConditionHandle
verwendet, ein Timeout von 4 500 Sekunden und den Standardwert 1 fürCount
aufweist (da keineCount
-Eigenschaft angegeben ist):"myWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "Ec2Instance", "Properties" : { "Handle" : { "Ref" : "myWaitHandle" }, "Timeout" : "4500" } }
-
Ruft das Vorsignierte ab, URL um es für die Signalisierung zu verwenden.
In der Vorlage URL kann das Vorsignierte abgerufen werden, indem der logische Name der
AWS::CloudFormation::WaitConditionHandle
Ressource an die intrinsische Funktion Ref übergeben wird. Sie können beispielsweise dieUserData
Eigenschaft onAWS::EC2::Instance
resources verwenden, um die vorsignierten URL an die EC2 Amazon-Instances weiterzuleiten, sodass Skripts oder Anwendungen, die auf diesen Instances ausgeführt werden, Erfolg oder Misserfolg signalisieren können AWS CloudFormation:"UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", ["SignalURL=", { "Ref" : "myWaitHandle" } ] ] } }
Hinweis: In der AWS Management Console Oder die AWS CloudFormation Befehlszeilentools, die vorsignierte URL wird als physische ID der Ressource „Wait Condition Handle“ angezeigt.
-
Wählen Sie eine Methode aus, mit der erkannt wird, wann für den Stack die Wartebedingung beginnt.
Wenn Sie den Stack mit aktivierten Benachrichtigungen erstellen, AWS CloudFormation veröffentlicht eine Benachrichtigung für jedes Stack-Ereignis zum angegebenen Thema. Wenn Sie oder Ihre Anwendung dieses Thema abonnieren, können Sie die Benachrichtigungen für das Ereignis zur Erstellung des Wartebedingungs-Handles überwachen und die in der Benachrichtigung vorsignierte URL Nachricht abrufen.
Sie können die Ereignisse des Stacks auch mit dem AWS Management Console, der AWS CloudFormation Befehlszeilentools oder die AWS CloudFormation API.
-
Verwenden Sie das VorzeichenURL, um Erfolg oder Misserfolg zu signalisieren.
Um ein Signal zu senden, senden Sie eine HTTP Anforderungsnachricht mit dem URL Vorsignierten. Die Anforderungsmethode muss
PUT
und der HeaderContent-Type
muss eine leere Zeichenfolge oder nicht angegeben sein. Die Anforderungsnachricht muss eine JSON Struktur der in JSONFormat des Wartezustandssignals angegebenen Form haben.Sie müssen die in der
Count
Eigenschaft angegebene Anzahl von Erfolgssignalen senden, um AWS CloudFormation um mit der Stack-Erstellung fortzufahren. WennCount
größer als 1 ist, muss der WertUniqueId
für alle Signale, die an eine bestimmte Wartebedingung gesendet werden, jeweils eindeutig sein. DieUniqueId
ist eine beliebige alphanumerische Zeichenfolge.Ein
curl
-Befehl ist eine Möglichkeit zum Senden eines Signals. Das folgende Beispiel zeigt einecurl
-Befehlszeile, die einer Wartebedingung den Erfolg signalisiert.$
curl -T /tmp/a \ "https://cloudformation-waitcondition-test.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3A
aws-region
%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"wobei die Datei /tmp/a die folgende Struktur enthält: JSON
{ "Status" : "SUCCESS", "Reason" : "Configuration Complete", "UniqueId" : "ID1234", "Data" : "Application has completed configuration." }
Dieses Beispiel zeigt eine
curl
Befehlszeile, die dasselbe Erfolgssignal sendet, außer dass sie die JSON Struktur als Parameter an die Befehlszeile sendet.$
curl -X PUT \ -H 'Content-Type:' --data-binary '{"Status" : "SUCCESS","Reason" : "Configuration Complete","UniqueId" : "ID1234","Data" : "Application has completed configuration."}' \ "https://cloudformation-waitcondition-test.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3A
aws-region
%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"
JSONFormat des Wartezustandssignals
Wenn Sie eine Wartebedingung signalisieren, müssen Sie das folgende JSON Format verwenden:
{ "Status" : "StatusValue", "UniqueId" : "Some UniqueId", "Data" : "Some Data", "Reason" : "Some Reason" }
Wobei gilt:
StatusValuemuss einer der folgenden Werte sein:
-
SUCCESSzeigt ein Erfolgssignal an.
-
FAILUREzeigt ein Fehlersignal an und löst eine fehlgeschlagene Wartebedingung und einen Stack-Rollback aus.
UniqueId
identifiziert das Signal für AWS CloudFormation. Wenn die Count
Eigenschaft der Wartebedingung größer als 1 ist, muss der UniqueId
Wert für alle Signale, die für eine bestimmte Wartebedingung gesendet wurden, eindeutig sein; andernfalls AWS CloudFormation betrachtet das Signal als eine erneute Übertragung des zuvor gesendeten Signals mit demselben UniqueId
und ignoriert das Signal.
Data
enthält Informationen, die Sie zusammen mit dem Signal senden möchten. Auf den Data
Wert kann zugegriffen werden, indem die GetAttFunktion Fn:: innerhalb der Vorlage aufgerufen wird. Wenn Sie beispielsweise den folgenden Ausgabewert für die Wartebedingung erstellenmywaitcondition
, können Sie den aws cloudformation describe-stacks
Befehl, die DescribeStacks
APIOperation oder die Registerkarte Ausgaben des AWS CloudFormation Konsole, um die von gültigen Data
gesendeten Signale anzuzeigen AWS CloudFormation:
"WaitConditionData" : { "Value" : { "Fn::GetAtt" : [ "mywaitcondition", "Data" ]}, "Description" : "The data passed back as part of signalling the WaitCondition" },
Die GetAttFunktion Fn:: gibt das UniqueId
und Data
als Name/Wert-Paar innerhalb einer JSON Struktur zurück. Das folgende Beispiel zeigt ein Data
-Attribut, das vom oben definierten Ausgabewert WaitConditionData
zurückgegeben wird:
{"Signal1":"Application has completed configuration."}
Reason ist eine Zeichenfolge, die außer JSON der Konformität keine weiteren inhaltlichen Einschränkungen aufweist.