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
In diesem Thema wird erklärt, wie Sie eine Wartebedingung in einer Vorlage erstellen, um die Erstellung von Stapelressourcen zu koordinieren oder den Fortschritt eines Konfigurationsprozesses zu verfolgen. 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.
Wenn ein Stack CloudFormation erstellt wird, der eine Wartebedingung enthält:
-
Sie erstellt eine Wartebedingung wie jede andere Ressource und setzt den Status der Wartebedingung auf
CREATE_IN_PROGRESS. -
CloudFormation wartet, bis die erforderliche Anzahl von Erfolgssignalen empfangen wurde oder die Zeitüberschreitung der Wartebedingung abgelaufen ist.
-
Wenn er die erforderliche Anzahl von Erfolgssignalen erhält, bevor die Timeout-Periode abläuft:
-
Der Status der Wartebedingung ändert sich zu
CREATE_COMPLETE. -
Die Erstellung von Stapeln geht weiter
-
-
Wenn die Zeitüberschreitung abläuft oder ein Fehlersignal empfangen wird:
-
Der Status der Wartebedingung ändert sich zu
CREATE_FAILED. -
Stapel rollt zurück
-
Wichtig
Für Amazon EC2 - und Amazon EC2 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.
Anmerkung
Wenn Sie diese Option verwenden AWS PrivateLink, müssen Ressourcen in der VPC, die auf Wartebedingungen reagieren, Zugriff auf 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 CloudFormation keine Antwort und der Stack-Vorgang schlägt fehl. Weitere Informationen finden Sie unter Zugriff CloudFormation über einen Schnittstellenendpunkt (AWS PrivateLink) und Kontrolle des Zugriffs von VPC-Endpunkten mit Bucket-Richtlinien.
Themen
Erstellen einer Wartebedingung in Ihrer Vorlage
1. Warten Bedingung Griff
Sie beginnen mit der Definition einer AWS::CloudFormation::WaitConditionHandle-Ressource in der Vorlage des Stacks. Diese Ressource generiert die vordefinierte URL, die zum Senden von Signalen benötigt wird. So können Sie ein Signal senden, ohne Ihre AWS -Anmeldedaten angeben zu müssen. Zum Beispiel:
Resources:MyWaitHandle: Type: AWS::CloudFormation::WaitConditionHandle
2. Wartebedingung
Als nächstes definieren Sie eine AWS::CloudFormation::WaitCondition-Ressource in der Vorlage des Stapels. Die Grundstruktur eines AWS::CloudFormation::WaitCondition sieht wie folgt aus:
MyWaitCondition: Type: AWS::CloudFormation::WaitCondition Properties: Handle:StringTimeout:StringCount:Integer
Die Ressource AWS::CloudFormation::WaitCondition hat zwei erforderliche Eigenschaften und eine optionale Eigenschaft.
-
Handle(erforderlich)- Ein Verweis auf ein in der Vorlage deklariertesWaitConditionHandle. -
Timeout(erforderlich) — Die Anzahl der Sekunden, die auf den CloudFormation Empfang der erforderlichen Anzahl von Signalen gewartet werden müssen.Timeoutist eine Eigenschaft, die an das Minimum gebunden ist. Das bedeutet, dass der 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). -
Count(optional) — Die Anzahl der Erfolgssignale, die empfangen CloudFormation werden müssen, bevor der Status dieser Wartebedingung auf gesetztCREATE_COMPLETEund die Erstellung des Stacks fortgesetzt wird. Wenn nicht angegeben, ist der Standardwert 1.
Normalerweise möchten Sie, dass eine Wartebedingung sofort nach der Erstellung einer bestimmten Ressource beginnt. Dazu fügen Sie das DependsOn Attribut einer Wartebedingung hinzu. Wenn Sie einer Wartebedingung ein DependsOn Attribut hinzufügen, CloudFormation erstellt zuerst die Ressource im DependsOn Attribut und dann die Wartebedingung. Weitere Informationen finden Sie unter DependsOn-Attribut.
Das folgende Beispiel demonstriert eine Wartebedingung, die:
-
Beginnt nach der erfolgreichen Erstellung der Ressource
MyEC2Instance. -
Verwendet die Ressource
MyWaitHandlealsWaitConditionHandle. -
Hat eine Zeitüberschreitung von 4500 Sekunden
-
Hat den Standardwert
Countvon 1 (da keine EigenschaftCountangegeben ist).
MyWaitCondition: Type: AWS::CloudFormation::WaitCondition DependsOn:MyEC2InstanceProperties: Handle:!Ref MyWaitHandleTimeout:'4500'
3. Senden eines Signals
Um Erfolg oder Misserfolg zu signalisieren CloudFormation, führen Sie in der Regel Code oder ein Skript aus. Beispielsweise kann eine Anwendung, die auf einer EC2 Instanz ausgeführt wird, einige zusätzliche Konfigurationsaufgaben ausführen und dann ein Signal an senden, CloudFormation um den Abschluss anzuzeigen.
Das Signal muss an die vordefinierte URL gesendet werden, die durch das Handle der Wartebedingung erzeugt wurde. Sie verwenden diese vordefinierte URL, um Erfolg oder Misserfolg zu signalisieren.
Um ein Signal zu senden
-
Um die vordefinierte URL innerhalb der Vorlage abzurufen, verwenden Sie die intrinsische Funktion
Refmit dem logischen Namen des Handles der Wartebedingung.Wie im folgenden Beispiel gezeigt, kann Ihre Vorlage eine EC2 Amazon-Instance deklarieren und die vorsignierte URL mithilfe der EC2
UserDataAmazon-Eigenschaft an EC2 Instances übergeben. Auf diese Weise können Skripte oder Anwendungen, die auf diesen Instances ausgeführt werden, den Erfolg oder Misserfolg signalisieren. CloudFormationMyEC2Instance: Type: AWS::EC2::Instance Properties: InstanceType:t2.micro# Example instance type ImageId:ami-055e3d4f0bbeb5878# Change this as needed (Amazon Linux 2023 in us-west-2) UserData: Fn::Base64: Fn::Join: - "" - -"SignalURL="- { "Ref":"MyWaitHandle"}Das Ergebnis ist eine
UserData-Ausgabe, die ähnlich aussieht:SignalURL=https://amzn-s3-demo-bucket.s3.amazonaws.com/....Hinweis: In den Befehlszeilentools AWS-Managementkonsole und den Befehlszeilentools wird die vorsignierte URL als physische ID der Ressource „Wait Condition Handle“ angezeigt.
-
(Optional) Um zu erkennen, wann der Stack in den Wartezustand eintritt, können Sie eine der folgenden Methoden verwenden:
-
Wenn Sie den Stack mit aktivierten Benachrichtigungen erstellen, veröffentlicht CloudFormation 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 mit dem, AWS-Managementkonsole dem AWS CLI oder einem SDK überwachen.
-
-
Um ein Signal zu senden, senden Sie eine HTTP-Anforderungsnachricht mithilfe der vorsignierten URL. Die Anforderungsmethode muss
PUTund der HeaderContent-Typemuss eine leere Zeichenfolge oder nicht angegeben sein. Die Anforderungsnachricht muss eine JSON-Struktur der Form aufweisen, die in Syntax des Wartezustandssignals angegeben ist.Sie müssen die in der
CountEigenschaft angegebene Anzahl von Erfolgssignalen senden, um mit der Stack-Erstellung CloudFormation fortzufahren. WennCountgrößer als 1 ist, muss der WertUniqueIdfür alle Signale, die an eine bestimmte Wartebedingung gesendet werden, jeweils eindeutig sein. DieUniqueIdist 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://amzn-s3-demo-bucket.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-west-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
die folgende JSON-Struktur enthält:/tmp/a{ "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://amzn-s3-demo-bucket.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-west-2%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"
Syntax des Wartezustandssignals
Wenn Sie Signale an die URL senden, die vom Handle der Wartebedingung erzeugt wird, müssen Sie das folgende JSON-Format verwenden:
{ "Status" :"StatusValue", "UniqueId" :"Some UniqueId", "Data" :"Some Data", "Reason" :"Some Reason"}
Eigenschaften
Das Feld Status muss einen der folgenden Werte enthalten:
-
SUCCESS -
FAILURE
Das UniqueId Feld identifiziert das Signal an 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 CloudFormation wird das Signal als erneute Übertragung des zuvor gesendeten Signals mit derselben betrachtet UniqueId und ignoriert.
Das Feld Data kann jede beliebige Information enthalten, die Sie mit dem Signal zurücksenden möchten. Sie können auf den Data Wert zugreifen, indem Sie die GetAtt Funktion Fn:: in der Vorlage verwenden.
Das Feld Reason ist eine Zeichenkette, deren Inhalt außer der JSON-Konformität keinen weiteren Einschränkungen unterliegt.
Zugriff auf Signaldaten
Um auf die von gültigen Signalen gesendeten Daten zuzugreifen, können Sie in Ihrer CloudFormation Vorlage einen Ausgabewert für die Wartebedingung erstellen. Zum Beispiel:
Outputs:WaitConditionData: Description:The data passed back as part of signalling the WaitConditionValue: !GetAttMyWaitCondition.Data
Sie können diese Daten dann mit dem describe-stacksBefehl oder auf der Registerkarte Ausgaben der CloudFormation Konsole anzeigen.
Die Fn::GetAtt Funktion gibt das UniqueId und Data als name/value Paar innerhalb einer JSON-Struktur zurück. Zum Beispiel:
{"Signal1":"Application has completed configuration."}