Benutzerdefinierte Ressourcen - 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.

Benutzerdefinierte Ressourcen

Anmerkung

Die CloudFormation Registrierung und die benutzerdefinierten Ressourcen bieten jeweils ihre eigenen Vorteile. Benutzerdefinierte Ressourcen bieten die folgenden Vorteile:

  • Sie müssen die Ressource nicht registrieren.

  • Sie können eine gesamte Ressource als Teil einer Vorlage verwenden, ohne sich zu registrieren.

  • Unterstützt die Delete Operationen CreateUpdate, und

Zu den Vorteilen, die registrierungsbasierte Ressourcen bieten, gehören:

  • Unterstützt die Modellierung, Provisionierung und Verwaltung von Anwendungsressourcen von Drittanbietern

  • Unterstützt die Vorgänge Create, Read, Update, Delete und List (CRUDL)

  • Unterstützt die Drifterkennung für Ressourcentypen privater und Drittanbieter

Im Gegensatz zu benutzerdefinierten Ressourcen müssen registrierungsbasierte Ressourcen kein SNS Amazon-Thema oder eine Lambda-Funktion zuordnen, um CRUDL Operationen auszuführen. Weitere Informationen finden Sie unter Erweiterungen mit der CloudFormation Registry verwalten.

Benutzerdefinierte Ressourcen bieten Ihnen die Möglichkeit, eine benutzerdefinierte Bereitstellungslogik in Ihre CloudFormation Vorlagen zu schreiben und sie jedes Mal CloudFormation auszuführen, wenn Sie einen Stack erstellen, aktualisieren (falls Sie die benutzerdefinierte Ressource geändert haben) oder löschen. Dies kann nützlich sein, wenn Ihre Bereitstellungsanforderungen komplexe Logiken oder Workflows beinhalten, die mit CloudFormation den integrierten Ressourcentypen nicht ausgedrückt werden können.

Beispielsweise möchten Sie möglicherweise Ressourcen einbeziehen, die nicht als CloudFormation Ressourcentypen verfügbar sind. Sie können diese Ressourcen mithilfe von benutzerdefinierten Ressourcen einschließen. Auf diese Weise können Sie weiterhin alle zugehörigen Ressourcen in einem einzigen Stapel verwalten.

Um eine benutzerdefinierte Ressource in Ihrer CloudFormation Vorlage zu definieren, verwenden Sie den Custom::MyCustomResourceTypeName Ressourcentyp AWS::CloudFormation::CustomResourceoder. Benutzerdefinierte Ressourcen benötigen eine Eigenschaft, das Service-Token, das angibt, wohin Anfragen CloudFormation gesendet werden, z. B. ein SNS Amazon-Thema oder eine Lambda-Funktion.

Die folgenden Themen enthalten Informationen zur Verwendung benutzerdefinierter Ressourcen.

Anmerkung

Wenn Sie die VPCEndpunktfunktion verwenden, VPC müssen benutzerdefinierte Ressourcen in der Zugriff auf CloudFormation -spezifische S3-Buckets haben. Benutzerdefinierte Ressourcen müssen Antworten an ein vorab signiertes Amazon S3 URL senden. Wenn sie keine Antworten an Amazon S3 senden können, erhalten sie CloudFormation keine Antwort und der Stack-Vorgang schlägt fehl. Weitere Informationen finden Sie unter Zugriff CloudFormation über einen Schnittstellenendpunkt (AWS PrivateLink).

So funktionieren benutzerdefinierte Ressourcen

Das allgemeine Verfahren zum Einrichten einer neuen benutzerdefinierten Ressource umfasst die folgenden Schritte. Diese Schritte umfassen zwei Rollen: den Anbieter für benutzerdefinierte Ressourcen, der Eigentümer der benutzerdefinierten Ressource ist, und den Vorlagenentwickler, der eine Vorlage erstellt, die einen benutzerdefinierten Ressourcentyp enthält. Dabei kann es sich um dieselbe Person handeln, aber wenn nicht, sollte der Anbieter für benutzerdefinierte Ressourcen mit dem Vorlagenentwickler zusammenarbeiten.

  1. Der benutzerdefinierte Ressourcenanbieter schreibt eine Logik, die bestimmt, wie Anfragen von der benutzerdefinierten Ressource behandelt CloudFormation und Aktionen für diese ausgeführt werden.

  2. Der benutzerdefinierte Ressourcenanbieter erstellt das SNS Amazon-Thema oder die Lambda-Funktion, an die Anfragen gesendet CloudFormation werden können. Das SNS Amazon-Thema oder die Lambda-Funktion müssen sich in derselben Region befinden, in der der Stack erstellt wird.

  3. Der benutzerdefinierte Ressourcenanbieter gibt dem Vorlagenentwickler SNS das Amazon-Thema ARN oder ARN die Lambda-Funktion.

  4. Der Vorlagenentwickler definiert die benutzerdefinierte Ressource in seiner CloudFormation Vorlage. Dazu gehören ein Service-Token und alle Eingabedatenparameter. Das Service-Token und die Struktur der Eingabedaten werden vom benutzerdefinierten Ressourcenanbieter definiert. Das Service-Token spezifiziert das SNS Amazon-Thema ARN oder die Lambda-Funktion ARN und ist immer erforderlich, aber die Eingabedaten sind je nach benutzerdefinierter Ressource optional.

Wenn nun jemand die Vorlage verwendet, um die benutzerdefinierte Ressource zu erstellen, zu aktualisieren oder zu löschen, CloudFormation sendet er eine Anfrage an das angegebene Service-Token und wartet dann auf eine Antwort, bevor er mit dem Stack-Vorgang fortfährt.

Im Folgenden wird der Ablauf für die Erstellung eines Stacks aus der Vorlage zusammengefasst:

  1. CloudFormation sendet eine Anfrage an das angegebene Service-Token. Die Anfrage enthält Informationen wie den Anfragetyp und einen vorab signierten Amazon Simple Storage ServiceURL, an den die benutzerdefinierte Ressource Antworten sendet. Weitere Informationen zu den in der Anforderung enthaltenen Informationen finden Sie unter Anforderungsobjekte für benutzerdefinierte Ressourcen.

    Die folgenden Beispieldaten zeigen, was in einer Create Anfrage CloudFormation enthalten ist. In diesem Beispiel ResourceProperties können CloudFormation Sie eine benutzerdefinierte Nutzlast erstellen, die an die Lambda-Funktion gesendet werden soll.

    { "RequestType" : "Create", "ResponseURL" : "http://pre-signed-S3-url-for-response", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this create request", "ResourceType" : "Custom::TestResource", "LogicalResourceId" : "MyTestResource", "ResourceProperties" : { "Name" : "Value", "List" : [ "1", "2", "3" ] } }
  2. Der benutzerdefinierte Ressourcenanbieter verarbeitet die CloudFormation Anfrage und gibt eine Antwort von SUCCESS oder an die vorsignierte FAILED Datei zurück. URL Der benutzerdefinierte Ressourcenanbieter stellt die Antwort in einer JSON -formatierten Datei bereit und lädt sie auf das vorsignierte S3 hoch. URL Weitere Informationen finden Sie unter Hochladen von Objekten mithilfe von vorsignierten Objekten URLs im Amazon Simple Storage Service-Benutzerhandbuch.

    Der custom resource provider kann in der Antwort auch Name-Wert-Paare angeben, auf die der template developer zugreifen kann. Die Antwort kann beispielsweise Ausgabedaten enthalten, wenn die Anforderung erfolgreich war, oder eine Fehlermeldung, wenn die Anforderung fehlgeschlagen ist. Weitere Informationen zu Antworten finden Sie unter Benutzerdefinierte Ressourcenantwortobjekte.

    Wichtig

    Wenn die Namen-Wert-Paare vertrauliche Informationen enthalten, sollten Sie das NoEcho-Feld benutzen, um die Ausgabe der benutzerdefinierten Ressource zu maskieren. Andernfalls sind die Werte durch die Eigenschaftswerte APIs dieser Oberfläche sichtbar (z. B.DescribeStackEvents).

    Weitere Informationen zur Verwendung NoEcho zum Maskieren vertraulicher Informationen finden Sie in der Keine Anmeldeinformationen in Vorlagen einbetten bewährten Methode.

    Der custom resource provider ist für das Erkennen und Beantworten der Anforderung verantwortlich. Bei SNS Amazon-Benachrichtigungen muss der Anbieter benutzerdefinierter Ressourcen beispielsweise Benachrichtigungen, die zu einem bestimmten Thema gesendet werden, abhören und darauf antwortenARN. CloudFormation wartet und wartet an der vorab URL signierten Stelle auf eine Antwort.

    In den folgenden Beispieldaten wird gezeigt, was eine benutzerdefinierte Ressourcen in eine Antwort einschließen kann:

    { "Status" : "SUCCESS", "PhysicalResourceId" : "TestResource1", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this create request", "LogicalResourceId" : "MyTestResource", "Data" : { "OutputName1" : "Value1", "OutputName2" : "Value2", } }
  3. Nachdem Sie eine SUCCESS Antwort erhalten haben, wird mit dem CloudFormation Stack-Vorgang fortgefahren. Wenn keine FAILED-Antwort oder gar keine Antwort zurückgegeben wird, schlägt der Vorgang fehl. Alle Ausgabedaten der benutzerdefinierten Ressource werden am vorsignierten URL Speicherort gespeichert. Der template developer kann die Daten mithilfe der Fn::GetAtt-Funktion abrufen.

Timeout für die Antwort

Das Standard-Timeout für Ihre benutzerdefinierte Ressource beträgt 3600 Sekunden (1 Stunde). Wenn während dieser Zeit keine Antwort eingeht, schlägt der Stack-Vorgang fehl.

Sie können den Timeout-Wert anpassen, je nachdem, wie lange Sie erwarten, dass die Antwort von der benutzerdefinierten Ressource dauert. Wenn Sie beispielsweise eine benutzerdefinierte Ressource bereitstellen, die eine Lambda-Funktion aufruft, von der erwartet wird, dass sie innerhalb von fünf Minuten reagiert, können Sie in der Stack-Vorlage ein Timeout von fünf Minuten festlegen, indem Sie die Eigenschaft angeben. ServiceTimeout Weitere Informationen finden Sie unter Anforderungsobjekte für benutzerdefinierte Ressourcen. Auf diese Weise schlägt der Stack-Vorgang nach fünf Minuten fehl, wenn in der Lambda-Funktion ein Fehler auftritt, der dazu führt, dass sie hängen bleibt, CloudFormation anstatt die ganze Stunde zu warten.

Achten Sie jedoch darauf, den Timeout-Wert nicht zu niedrig einzustellen. Um unerwartete Timeouts zu vermeiden, stellen Sie sicher, dass Ihre benutzerdefinierte Ressource genügend Zeit hat, um die erforderlichen Aktionen durchzuführen und eine Antwort zurückzugeben.