Wartebedingungen in einer CloudFormation Vorlage erstellen - AWS CloudFormation

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ückCREATE_FAILED.

  • Die Timeout Eigenschaft bestimmt, wie lange AWS CloudFormation wartet auf die erforderliche Anzahl von Erfolgssignalen. Timeoutist 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 einem DependsOn Attribut, das die DB-Instance spezifiziert, und Sie erstellen EC2 Instance-Ressourcen mit DependsOn 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 Eigenschaft Count 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:
  1. Deklarieren Sie eine AWS::CloudFormation::WaitConditionHandle-Ressource in der Vorlage des Stacks. Ein Wartebedingungs-Handle hat keine Eigenschaften. Ein Verweis auf eine WaitConditionHandle 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" : { } }
  2. Deklarieren Sie eine AWS::CloudFormation::WaitCondition-Ressource in der Vorlage des Stacks. Eine WaitCondition Ressource hat zwei erforderliche Eigenschaften: Sie Handle ist ein Verweis auf eine in der Vorlage WaitConditionHandle deklarierte Eigenschaft und Timeout entspricht der Anzahl Sekunden für AWS CloudFormation zu warten. Sie können optional die Count 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. Eine DependsOn-Klausel ordnet eine Ressource der Wartebedingung zu. Nach AWS CloudFormation erstellt die DependsOn 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 Ressource myWaitHandle als WaitConditionHandle verwendet, ein Timeout von 4 500 Sekunden und den Standardwert 1 für Count aufweist (da keine Count-Eigenschaft angegeben ist):

    "myWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "Ec2Instance", "Properties" : { "Handle" : { "Ref" : "myWaitHandle" }, "Timeout" : "4500" } }
  3. 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 die UserData Eigenschaft on AWS::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.

  4. 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.

  5. 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 Header Content-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. Wenn Count größer als 1 ist, muss der Wert UniqueId für alle Signale, die an eine bestimmte Wartebedingung gesendet werden, jeweils eindeutig sein. Die UniqueId ist eine beliebige alphanumerische Zeichenfolge.

    Ein curl-Befehl ist eine Möglichkeit zum Senden eines Signals. Das folgende Beispiel zeigt eine curl-Befehlszeile, die einer Wartebedingung den Erfolg signalisiert.

    $ curl -T /tmp/a \ "https://cloudformation-waitcondition-test.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aaws-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%3Aaws-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.

UniqueIdidentifiziert 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 DescribeStacksAPIOperation 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.