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.
Erstellen von Wartebedingungen in einer Vorlage
Wichtig
Für Amazon EC2- und Auto Scaling-Ressourcen empfehlen wir die Verwendung eines CreationPolicy Attributs anstelle von Wartebedingungen. Fügen Sie diesen Ressourcen ein CreationPolicy Attribut hinzu und verwenden Sie das Hilfsskript cfn-signal, um zu signalisieren, wann ein Instance-Erstellungsprozess erfolgreich abgeschlossen wurde.
Weitere Informationen finden Sie unter CreationPolicy Attribut oder Bereitstellen von Anwendungen auf Amazon EC2 mit AWS CloudFormation.
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 VPC-Endpunktfunktion verwenden, müssen Ressourcen in der VPC, die auf Wartebedingungen reagieren, Zugriff auf AWS CloudFormation-spezifische Amazon Simple Storage Service (Amazon S3)-Buckets haben. Ressourcen müssen Wartebedingungs-Antworten an eine vorsignierte Amazon-S3-URL senden. Wenn sie keine Antworten an Amazon S3 senden können, empfängt AWS CloudFormation keine Antwort und der Stack-Vorgang schlägt fehl. Weitere Informationen finden Sie unter Einrichten von VPC-Endpunkten für AWS CloudFormation und Beispiel-Bucket-Richtlinien für VPC-Endpunkte für Amazon S3.
Sie können die Wartebedingung und den Wartebedingungs-Handle verwenden, um die Erstellung eines Stacks AWS CloudFormation anzuhalten und auf ein Signal zu warten, bevor der Stack weiter erstellt wird. Sie können beispielsweise Anwendungen auf eine Amazon EC2-Instance herunterladen und konfigurieren, bevor die Erstellung der Amazon EC2-Instance als abgeschlossen betrachtet wird.
Die folgende Liste enthält eine Zusammenfassung der Funktionsweise einer Wartebedingung mit einem Wartebedingungs-Handle:
-
AWS CloudFormation erstellt eine Wartebedingung wie jede andere Ressource. Wenn eine Wartebedingung AWS CloudFormation erstellt, meldet es den Status der Wartebedingung als CREATE_IN_PROGRESS und wartet, bis es die erforderliche Anzahl Erfolgssignale erhält oder der Timeout-Zeitraum der Wartebedingung abgelaufen ist. Wenn die erforderliche Anzahl Erfolgssignale AWS CloudFormation erhält, bevor der Timeout-Zeitraum abgelaufen ist, wird die Stack-Erstellung fortgesetzt. Andernfalls wird der Status der Wartebedingung auf gesetzt
CREATE_FAILED
und der Stack wird zurückgesetzt. -
Die -
Timeout
Eigenschaft bestimmt, wie lange auf die erforderliche Anzahl von Erfolgssignalen AWS CloudFormation wartet.Timeout
ist eine minimal gebundene Eigenschaft, d. h. das Timeout tritt frühestens zu dem von Ihnen angegebenen Zeitpunkt auf, kann aber kurz danach auftreten. Die maximale Zeit, die Sie angeben können, ist 43200 Sekunden (12 Stunden). -
In der Regel sollte eine Wartebedingung sofort nach der Erstellung einer bestimmten Ressource beginnen, z. B. einer Amazon EC2-Instance, einer RDS DB-Instance oder einer Auto-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 mit dem Timeout-Zeitraum und wartet auf Erfolgssignale. -
Das Attribut
DependsOn
können Sie auch für andere Ressourcen verwenden. Beispiel: Sie möchten zunächst eine Amazon-RDS-DB-Instance erstellen und darauf eine Datenbank konfigurieren, bevor Sie die EC2-Instances erstellen, die die betreffende Datenbank verwenden. In diesem Fall erstellen Sie eine Wartebedingung mit einemDependsOn
-Attribut, das die DB-Instance angibt. Dann erstellen Sie EC2-Instance-Ressourcen mitDependsOn
-Attributen, die die Wartebedingung angeben. Dies würde sicherstellen, 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 erhalten, bevor der Status dieser Wartebedingung so festgelegt wird, dass die Stack-Erstellung
CREATE_COMPLETE
fortgesetzt 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 zum Einrichten einer vorsignierten URL, die als Signalmechanismus verwendet wird. Mit der vorsignierten URL können Sie ein Signal senden, ohne Ihre AWS Anmeldeinformationen angeben zu müssen. Sie verwenden diese vorsignierte URL, um Erfolg oder Misserfolg anzugeben. Sie ist in einer JSON-Anweisung verkapselt. Informationen zum Format der JSON-Anweisung finden Sie unter JSON-Format des Signals einer Wartebedingung.
-
Wenn eine Wartebedingung die erforderliche Anzahl Erfolgssignale (wie in der Count-Eigenschaft definiert) erhält, bevor der Timeout-Zeitraum abläuft, AWS CloudFormation markiert die Wartebedingung als
CREATE_COMPLETE
und setzt die Stack-Erstellung 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 wird jedoch zu einer vorsignierten URL aufgelöst, mit deren Hilfe Sie derWaitCondition
den Erfolg oder Fehler signalisieren können. Beispielsweise:"myWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle", "Properties" : { } }
-
Deklarieren Sie eine
AWS::CloudFormation::WaitCondition
-Ressource in der Vorlage des Stacks. EineWaitCondition
-Ressource verfügt über zwei erforderliche Eigenschaften:Handle
ist ein Verweis auf ein in der Vorlage deklariertesWaitConditionHandle
undTimeout
die Anzahl Sekunden, die AWS CloudFormation warten muss. Sie können optional die -Count
Eigenschaft festlegen, die die Anzahl der Erfolgssignale bestimmt, die die Wartebedingung erhalten muss, bevor die Stack-Erstellung fortsetzen AWS CloudFormation kann.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. Nachdem AWS CloudFormation die RessourceDependsOn
erstellt hat, wird jede weitere Erstellung von Stack-Ressourcen blockiert, bis eines der folgenden Ereignisse eintritt: a) der Timeout-Zeitraum läuft ab, b) die erforderliche Anzahl Erfolgssignale 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" } }
-
Rufen Sie die vorsignierte URL ab, die für Signale verwendet werden soll.
In der Vorlage kann die vorsignierte URL abgerufen werden, indem der logische Name der Ressource
AWS::CloudFormation::WaitConditionHandle
an die intrinsische Ref-Funktion übergeben wird. Sie können beispielsweise mithilfe der EigenschaftUserData
vonAWS::EC2::Instance
-Ressourcen die vorsignierte URL an die Amazon-EC2-Instances übergeben, damit die Skripts oder Anwendungen, die auf diesen Instances ausgeführt werden, den Erfolg oder Fehler an AWS CloudFormationsignalisieren können:"UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", ["SignalURL=", { "Ref" : "myWaitHandle" } ] ] } }
Hinweis: In der AWS Management Console oder den AWS CloudFormation Befehlszeilen-Tools wird die vorsignierte URL als physische ID der Wartebedingungs-Handle-Ressource 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 für das angegebene Thema. Wenn Sie oder Ihre Anwendung dieses Thema abonnieren, können Sie die Benachrichtigungen für das Wartebedingungs-Handle-Erstellungsereignis überwachen und die vorsignierte URL aus der Benachrichtigungsnachricht abrufen.
Sie können die Ereignisse des Stacks auch mithilfe der AWS Management Console, der AWS CloudFormation Befehlszeilen-Tools oder der AWS CloudFormation API überwachen.
-
Verwenden Sie die vorsignierte URL, um Erfolg oder Fehler anzugeben.
Um ein Signal zu senden, senden Sie eine HTTP-Anforderungsnachricht mithilfe der vorsignierten URL. Die Anforderungsmethode muss
PUT
und der HeaderContent-Type
muss eine leere Zeichenfolge oder nicht angegeben sein. Die Anforderungsnachricht muss eine JSON-Struktur der Form aufweisen, die in JSON-Format des Signals einer Wartebedingung angegeben ist.Sie müssen die Anzahl der Erfolgssignale senden, die von der -
Count
Eigenschaft angegeben werden AWS CloudFormation , damit die Stack-Erstellung fortsetzen kann. 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%3Aus-east-2%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 folgenden JSON-Struktur enthält:
{ "Status" : "SUCCESS", "Reason" : "Configuration Complete", "UniqueId" : "ID1234", "Data" : "Application has completed configuration." }
Das folgende Beispiel zeigt eine
curl
-Befehlszeile, die dasselbe Erfolgssignal sendet, wobei aber die JSON-Struktur als Parameter in der Befehlszeile gesendet wird.$
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%3Aus-east-2%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"
JSON-Format des Signals einer Wartebedingung
Wenn Sie ein Signal an eine Wartebedingung senden, müssen Sie das folgenden JSON-Format verwenden:
{ "Status" : "StatusValue", "UniqueId" : "Some UniqueId", "Data" : "Some Data", "Reason" : "Some Reason" }
Wobei gilt:
StatusValue muss einer der folgenden Werte sein:
-
SUCCESS gibt ein Erfolgssignal an.
-
FAILURE gibt ein Fehlersignal an und löst eine fehlgeschlagene Wartebedingung und das Rollback des Stacks aus.
UniqueId
identifiziert das Signal an 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 werdenUniqueId
, eindeutig sein. Andernfalls AWS CloudFormation betrachtet das Signal als erneute Übertragung des zuvor gesendeten Signals mit demselben 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 -Fn::GetAtt Funktion 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
API-Operation oder die Registerkarte Outputs der AWS CloudFormation Konsole verwenden, um die von gültigen Signalen Data
gesendeten anzuzeigen AWS CloudFormation:
"WaitConditionData" : { "Value" : { "Fn::GetAtt" : [ "mywaitcondition", "Data" ]}, "Description" : "The data passed back as part of signalling the WaitCondition" },
Die Fn::GetAtt Funktion gibt die 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 mit keinen anderen Einschränkungen für den Inhalt als der Übereinstimmung mit JSON.