Erstellen von Wartebedingungen in einer Vorlage - 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.

Erstellen von Wartebedingungen in einer Vorlage

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 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, erhalten sie AWS CloudFormation keine Antwort und der Stack-Vorgang schlägt fehl. Weitere Informationen finden Sie unter Zugriff CloudFormation über einen Schnittstellenendpunkt (AWS PrivateLink) und Beispiel-Bucket-Richtlinien für VPC-Endpunkte für Amazon S3.

Sie können die Wartebedingung und das 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 erzeugt eine Wartebedingung wie jede andere Ressource. Wenn AWS CloudFormation eine Wartebedingung erstellt, wird der Status der Wartebedingung als CREATE_IN_PROGRESS gemeldet und gewartet, bis die erforderliche Anzahl Erfolgssignale erhalten wurden oder der Zeitüberschreitungzeitraum der Wartebedingung abgelaufen ist. Wenn sie vor Ablauf der Timeout-Zeit die erforderliche Anzahl von Erfolgssignalen AWS CloudFormation empfängt, setzt sie die Erstellung des Stacks fort. Andernfalls setzt sie den Status der Wartebedingung auf CREATE_FAILED und setzt den Stack zurück.

  • Die Timeout Eigenschaft bestimmt, wie lange auf die erforderliche Anzahl von AWS CloudFormation Erfolgssignalen gewartet wird. 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).

  • 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 eingerichtet ist, AWS CloudFormation beginnt der 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 einem DependsOn-Attribut, das die DB-Instance angibt. Dann erstellen Sie EC2-Instance-Ressourcen mit DependsOn-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 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 zum Einrichten einer vorsignierten URL, die als Signalmechanismus verwendet wird. Die vorsignierte URL ermöglicht es Ihnen, ein Signal zu 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 abgelaufen ist, kennzeichnet AWS CloudFormation die Wartebedingung als CREATE_COMPLETE und setzt die Stack-Erstellung fort. Andernfalls AWS CloudFormation schlägt die Wartebedingung fehl und der Stack wird zurückgesetzt (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 wird jedoch zu einer vorsignierten URL aufgelöst, mit deren Hilfe Sie der WaitCondition den Erfolg oder Fehler signalisieren können. 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 gibt die Anzahl Sekunden an, für die gewartet werden AWS CloudFormation soll. Sie können optional die Count Eigenschaft festlegen, die die Anzahl der Erfolgssignale bestimmt, die die Wartebedingung empfangen muss, bevor die Erstellung des Stacks fortgesetzt werden AWS CloudFormation kann.

    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. Nachdem die DependsOn Ressource AWS CloudFormation erstellt wurde, blockiert sie 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. 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 Eigenschaft UserData von AWS::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 CloudFormation signalisieren können:

    "UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", ["SignalURL=", { "Ref" : "myWaitHandle" } ] ] } }

    Hinweis: In den AWS Management Console oder den AWS CloudFormation Befehlszeilentools wird die vorsignierte URL 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 er für jedes Stack-Ereignis eine Benachrichtigung zum angegebenen 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 Befehlszeilentools oder der AWS CloudFormation API überwachen.

  5. 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 Header Content-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 in der Count Eigenschaft angegebene Anzahl von Erfolgssignalen senden, um mit der Stack-Erstellung fortzufahren. AWS CloudFormation 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%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:

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

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 wird das Signal als eine erneute Übertragung des zuvor gesendeten Signals mit derselben UniqueId betrachtet und das Signal wird ignoriert.

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 DescribeStacksAPI-Operation oder die Registerkarte Ausgaben der AWS CloudFormation Konsole verwenden, um die Data gesendeten gültigen Signale anzuzeigen, an AWS CloudFormation:

"WaitConditionData" : { "Value" : { "Fn::GetAtt" : [ "mywaitcondition", "Data" ]}, "Description" : "The data passed back as part of signalling the WaitCondition" },

Die GetAttFunktionsfunktion 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 mit keinen anderen Einschränkungen für den Inhalt als der Übereinstimmung mit JSON.