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 Stack-Ressourcen 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:
-
Es erstellt wie jede andere Ressource eine Wartebedingung 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 es die erforderliche Anzahl von Erfolgssignalen empfängt, bevor der Timeout-Zeitraum abläuft:
-
Der Status des Wartezustands ändert sich zu
CREATE_COMPLETE
-
Die Stack-Erstellung wird fortgesetzt
-
-
Wenn das Timeout abläuft oder ein Fehlersignal empfangen wird:
-
Der Status des Wartezustands ändert sich zu
CREATE_FAILED
-
Der Stapel wird zurückgesetzt
-
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 Stellen Sie Anwendungen auf Amazon bereit EC2.
Anmerkung
Wenn Sie verwenden AWS PrivateLink, müssen Ressourcen in den, VPC die auf Wartebedingungen reagieren, Zugriff auf CloudFormation spezifische Amazon Simple Storage Service (Amazon S3) -Buckets haben. Ressourcen müssen Antworten auf Wartebedingungen an ein vorsigniertes 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 Steuern des Zugriffs von VPC Endpunkten aus mit Bucket-Richtlinien.
Themen
Eine Wartebedingung in Ihrer Vorlage erstellen
1. Handle für Wartebedingungen
Sie beginnen mit der Definition eines AWS::CloudFormation::WaitConditionHandleRessource in der Vorlage des Stacks. Diese Ressource generiert das Vorzeichen, das für das Senden von Signalen URL benötigt wird. Auf diese Weise können Sie ein Signal senden, ohne Ihre AWS Anmeldeinformationen angeben zu müssen. Beispielsweise:
Resources:
MyWaitHandle
: Type: AWS::CloudFormation::WaitConditionHandle
2. Wartebedingung
Als Nächstes definieren Sie eine AWS::CloudFormation::WaitConditionRessource in der Vorlage des Stacks. Die Grundstruktur von a AWS::CloudFormation::WaitCondition
sieht so aus:
MyWaitCondition
: Type: AWS::CloudFormation::WaitCondition Properties: Handle:String
Timeout:String
Count:Integer
Die AWS::CloudFormation::WaitCondition
Ressource hat zwei erforderliche Eigenschaften und eine optionale Eigenschaft.
-
Handle
(erforderlich) — Ein Verweis auf eine in der VorlageWaitConditionHandle
deklarierte. -
Timeout
(erforderlich) — Die Anzahl der Sekunden, die benötigt werden CloudFormation, um auf den Empfang der erforderlichen Anzahl von Signalen zu warten.Timeout
ist 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_COMPLETE
und die Erstellung des Stacks fortgesetzt wird. Wenn nicht angegeben, ist der Standardwert 1.
In der Regel möchten Sie, dass eine Wartebedingung unmittelbar nach der Erstellung einer bestimmten Ressource beginnt. Sie tun dies, indem Sie den hinzufügen DependsOn Attribut einer Wartebedingung. Wenn Sie einer Wartebedingung ein DependsOn
Attribut hinzufügen, CloudFormation erstellt zuerst die Ressource im DependsOn
Attribut und dann die Wartebedingung.
Das folgende Beispiel zeigt eine Wartebedingung, die:
-
Beginnt nach der erfolgreichen Erstellung der
MyEC2Instance
Ressource -
Verwendet die
MyWaitHandle
Ressource alsWaitConditionHandle
-
Hat ein Timeout von 4500 Sekunden
-
Hat den Standardwert
Count
1 (da keineCount
Eigenschaft angegeben ist)
MyWaitCondition
: Type: AWS::CloudFormation::WaitCondition DependsOn:MyEC2Instance
Properties: Handle:!Ref MyWaitHandle
Timeout:'4500'
3. Ein Signal senden
Um Erfolg oder Misserfolg zu signalisieren CloudFormation, führen Sie normalerweise 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 das vom Wartebedingungs-Handle URL generierte Vorzeichen gesendet werden. Sie verwenden dieses Vorzeichen, um Erfolg oder Misserfolg URL zu signalisieren.
Um ein Signal zu senden
-
Um das URL in der Vorlage vorsignierte Objekt abzurufen, verwenden Sie die
Ref
systeminterne Funktion mit dem logischen Namen des Wartebedingungs-Handles.Wie im folgenden Beispiel gezeigt, kann Ihre Vorlage eine EC2 Amazon-Instance deklarieren und die vorsignierte Instance mithilfe der EC2
UserData
Amazon-Eigenschaft URL 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"
}Dies führt zu einer
UserData
Ausgabe, die der folgenden ähnelt:SignalURL=https://amzn-s3-demo-bucket.s3.amazonaws.com/....
Hinweis: In den Befehlszeilentools AWS Management Console und den Befehlszeilentools URL wird das Presigned als physische ID der Handle-Ressource für die Wartebedingung angezeigt.
-
(Optional) Um zu erkennen, wann der Stack in den Wartezustand übergeht, 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 Ereignis zur Erstellung des Wartebedingungs-Handles überwachen und die URL aus der Benachrichtigung vorsignierte Nachricht abrufen.
-
Sie können die Ereignisse des Stacks auch mit dem AWS Management Console AWS CLI, dem oder einem SDK überwachen.
-
-
Um ein Signal zu senden, senden Sie eine HTTP Anforderungsnachricht unter Verwendung des VorsigniertenURL. Die Anforderungsmethode muss
PUT
und der HeaderContent-Type
muss eine leere Zeichenfolge oder nicht angegeben sein. Die Anforderungsnachricht muss eine JSON Struktur der in Syntax des Signals für Wartebedingungen angegebenen Form haben.Sie müssen die in der
Count
Eigenschaft angegebene Anzahl von Erfolgssignalen senden, um mit der Stack-Erstellung fortzufahren. CloudFormation 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://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."
}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://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 Signals für Wartebedingungen
Wenn Sie Signale an das durch die Wartebedingung URL generierte Handle senden, müssen Sie das folgende JSON Format verwenden:
{ "Status" :
"StatusValue"
, "UniqueId" :"Some UniqueId"
, "Data" :"Some Data"
, "Reason" :"Some Reason"
}
Eigenschaften
Das Status
Feld muss einen der folgenden Werte haben:
-
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 Data
Feld kann alle Informationen enthalten, die Sie zusammen mit dem Signal zurücksenden möchten. Sie können auf den Data
Wert zugreifen, indem Sie die GetAtt Funktion Fn:: innerhalb der Vorlage verwenden.
Das Reason
Feld ist eine Zeichenfolge, deren Inhalt außer der JSON Konformität keine weiteren Einschränkungen aufweist.
Zugreifen 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. Beispielsweise:
Outputs:
WaitConditionData
: Description:The data passed back as part of signalling the WaitCondition
Value: !GetAttMyWaitCondition
.Data
Sie können diese Daten dann mit dem Befehl anzeigen describe-stacksBefehl oder die Registerkarte Ausgaben der CloudFormation Konsole.
Die Fn::GetAtt
Funktion gibt das UniqueId
und Data
als Name/Wert-Paar innerhalb einer JSON Struktur zurück. Beispielsweise:
{"Signal1":"Application has completed configuration."}