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.
Von Amazon SNS unterstützte benutzerdefinierte Ressourcen
Das folgende Thema zeigt Ihnen, wie Sie eine benutzerdefinierte Ressource mit einem Service-Token konfigurieren, das das SNS Amazon-Thema angibt, CloudFormation an das Anfragen gesendet werden. Sie lernen auch die Reihenfolge der Ereignisse und Nachrichten kennen, die als Ergebnis der Erstellung, Aktualisierung und Löschung eines benutzerdefinierten Ressourcenstapels gesendet und empfangen wurden.
Mit benutzerdefinierten Ressourcen und Amazon SNS können Sie Szenarien wie das Hinzufügen neuer Ressourcen zu einem Stack und das Einfügen dynamischer Daten in einen Stack ermöglichen. Wenn Sie beispielsweise einen Stack erstellen, CloudFormation können Sie eine Create
Anfrage an ein Thema senden, das von einer Anwendung überwacht wird, die auf einer EC2 Amazon-Instance ausgeführt wird. Die SNS Amazon-Benachrichtigung veranlasst die Anwendung, zusätzliche Bereitstellungsaufgaben auszuführen, wie z. B. das Abrufen eines Pools von Elastic IP-Adressen auf der Zulassungsliste. Danach sendet die Anwendung eine Antwort (und alle Ausgabedaten), in der aufgefordert wird, mit dem Stack-Vorgang CloudFormation fortzufahren.
Wenn Sie ein SNS Amazon-Thema als Ziel einer benutzerdefinierten Ressource angeben, CloudFormation sendet bei Stack-Vorgängen, an denen die benutzerdefinierte Ressource beteiligt ist, Nachrichten an das angegebene SNS Thema. Um diese Nachrichten verarbeiten und die erforderlichen Aktionen ausführen zu können, muss ein unterstützter Endpunkt das SNS Thema abonniert haben.
Eine Einführung in benutzerdefinierte Ressourcen und deren Funktionsweise finden Sie unterErstellen Sie eine benutzerdefinierte Bereitstellungslogik mit benutzerdefinierten Ressourcen. Informationen zu Amazon SNS und seiner Funktionsweise finden Sie im Amazon Simple Notification Service Developer Guide.
Verwenden von Amazon SNS zur Erstellung benutzerdefinierter Ressourcen
Schritt 1: Erstellen des Stacks
-
Der Vorlagenentwickler erstellt einen CloudFormation Stack, der eine benutzerdefinierte Ressource enthält.
Im folgenden Vorlagenbeispiel verwenden wir den Namen des benutzerdefinierten Ressourcentyps
Custom::
für die benutzerdefinierte Ressource mit logischer IDSeleniumTester
. Benutzerdefinierte Ressourcentypnamen müssen alphanumerisch sein und können maximal 60 Zeichen enthalten.MySeleniumTest
Der benutzerdefinierte Ressourcentyp wird mit einem Service-Token, optionalen anbieterspezifischen Eigenschaften und optionalen Fn::GetAtt Attributen deklariert, die vom benutzerdefinierten Ressourcenanbieter definiert werden. Diese Eigenschaften und Attribute können verwendet werden, um Informationen vom template developer an custom resource provider zu übergeben und umgekehrt. Das Service-Token gibt ein SNS Amazon-Thema an, das der Ressourcenanbieter konfiguriert hat.
{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "
MySeleniumTest
" : { "Type": "Custom::SeleniumTester
", "Version" : "1.0", "Properties" : { "ServiceToken": "arn:aws:sns:us-west-2
:123456789012
:CRTest
","seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com" ], "frequencyOfTestsPerHour" : [ "3", "2", "4" ]
} } }, "Outputs" : { "topItem
" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest
", "resultsPage
"] } }, "numRespondents
" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest"
, "lastUpdate
"] } } } }Anmerkung
Die Namen und Werte der Daten, mit
denen zugegriffen wird, werden vom Anbieter für benutzerdefinierte Ressourcen während der Antwort des Anbieters auf zurückgegeben CloudFormation. Wenn der custom resource provider von einem Drittanbieter stammt, muss der template developer die Namen dieser Rückgabewerte vom custom resource provider abrufen.Fn::GetAtt
-
CloudFormation sendet eine SNS Amazon-Benachrichtigung an den Ressourcenanbieter mit einer
"RequestType" : "Create"
, die Informationen über den Stack, die benutzerdefinierten Ressourceneigenschaften aus der Stack-Vorlage und ein S3 URL für die Antwort enthält.Das SNS Thema, das zum Senden der Benachrichtigung verwendet wird, ist in die Vorlage in der
ServiceToken
Eigenschaft eingebettet. Um die Verwendung eines hartcodierten Werts zu vermeiden, kann ein Vorlagen-Entwickler einen Vorlagenparameter verwenden, sodass der Wert zu dem Zeitpunkt eingegeben wird, wenn der Stack gelauncht wird.Das folgende Beispiel zeigt eine
Create
-Anforderung einer benutzerdefinierten Ressource, die einen benutzerdefinierten Ressourcentypnamen,Custom::SeleniumTester
, enthält, der mit derLogicalResourceId
MySeleniumTester
erstellt wurde:{ "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::SeleniumTester", "LogicalResourceId" : "MySeleniumTester", "ResourceProperties" : { "seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com" ], "frequencyOfTestsPerHour" : [ "3", "2", "4" ] } }
Ausführliche Informationen zum Anforderungsobjekt für
Create
Anfragen finden Sie im Anfrage für CloudFormation benutzerdefinierte Ressourcen erstellen Thema. -
Der custom resource provider verarbeitet die Daten, die von template developer gesendet werden und bestimmt, ob die
Create
-Anforderung erfolgreich war. Der Ressourcenanbieter verwendet dann das S3, das von URL gesendet wurde CloudFormation , um eine Antwort entwederSUCCESS
oder zu sendenFAILED
.Je nach Antworttyp werden unterschiedliche Antwortfelder von erwartet CloudFormation. Informationen zu den Antwortfeldern für einen bestimmten Anforderungstyp finden Sie in der Dokumentation zu diesem Anforderungstyp im Anforderungstypen für benutzerdefinierte Ressourcen Abschnitt.
Als Antwort auf eine Anforderung zum Erstellen oder Aktualisieren kann custom resource provider Datenelemente im Feld Data der Antwort zurückgeben. Dabei handelt es sich um Name-Wert-Paare und die Namen entsprechen den
-Attributen mit der benutzerdefinierten Ressource in der Stack-Vorlage. Die Werte sind die Daten, die zurückgegeben werden, wenn der Vorlagen-EntwicklerFn::GetAtt
für die Ressource mit dem Attributnamen aufruft.Fn::GetAtt
Nachfolgend finden Sie eine Beispielantwort einer benutzerdefinierten Ressource:
{ "Status" : "SUCCESS", "PhysicalResourceId" : "Tester1", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this create request", "LogicalResourceId" : "MySeleniumTester", "Data" : { "resultsPage" : "http://www.myexampledomain/test-results/guid", "lastUpdate" : "2012-11-14T03:30Z" } }
Ausführliche Informationen zum Antwortobjekt für
Create
Anfragen finden Sie im Anfrage für CloudFormation benutzerdefinierte Ressourcen erstellen Thema.Die
StackId
,RequestId
undLogicalResourceId
-Felder müssen wörtlich aus der Anforderung kopiert werden. -
CloudFormation deklariert den Stack-Status als
CREATE_COMPLETE
oderCREATE_FAILED
. Wenn der Stack erfolgreich erstellt wurde, kann der template developer die Ausgabewerte der erstellten benutzerdefinierten verwenden, indem mit Fn::GetAtt darauf zugegriffen wird.Die benutzerdefinierte Ressourcenvorlage, die zur Veranschaulichung verwendet wird, verwendete
zum Kopieren von Ressourcenausgaben in die Stack-Ausgabe:Fn::GetAtt
"Outputs" : { "
topItem
" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest
", "resultsPage
"] } }, "numRespondents
" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest
", "lastUpdate
"] } } }
Schritt 2: Stack-Updates
Um einen vorhandenen Stack zu aktualisieren, müssen Sie eine Vorlage einreichen, die Aktualisierungen für die Eigenschaften der Ressourcen im Stack angibt, wie im Beispiel unten gezeigt. CloudFormationaktualisiert nur die Ressourcen, deren Änderungen in der Vorlage angegeben sind. Weitere Informationen finden Sie unter Verstehen Sie das Aktualisierungsverhalten von Stack-Ressourcen.
Sie können benutzerdefinierte Ressourcen aktualisieren, bei denen eine der zugrunde liegenden physischen Ressourcen ersetzt werden muss. Wenn Sie eine benutzerdefinierte Ressource in einer CloudFormation Vorlage aktualisieren, CloudFormation sendet eine Aktualisierungsanforderung an diese benutzerdefinierte Ressource. Wenn eine benutzerdefinierte Ressource ersetzt werden muss, muss die neu benutzerdefinierte Ressource eine Antwort mit der neuen physischen ID senden. Wenn es die Antwort CloudFormation erhält, vergleicht PhysicalResourceId
es die alten und neuen benutzerdefinierten Ressourcen. Wenn sie unterschiedlich sind, CloudFormation erkennt es das Update als Ersatz und sendet eine Löschanfrage an die alte Ressource, wie unter gezeigtSchritt 3: Löschen des Stacks.
Anmerkung
Wenn Sie keine Änderungen an der benutzerdefinierten Ressource vorgenommen haben, CloudFormation werden während eines Stack-Updates keine Anfragen an sie gesendet.
-
Der template developer initiiert ein Update für den Stack, der eine benutzerdefinierte Ressource enthält. Während eines Update kann template developer neue Eigenschaften in der Stack-Vorlage angeben.
Nachfolgend sehen Sie ein Beispiel für ein
Update
am der Stack-Vorlage mithilfe eines benutzerdefinierten Ressourcentyps:{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "MySeleniumTest" : { "Type": "Custom::SeleniumTester", "Version" : "1.0", "Properties" : { "ServiceToken": "arn:aws:sns:us-west-2:123456789012:CRTest", "seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com",
"http://mynewsite.com"
], "frequencyOfTestsPerHour" : [ "3", "2", "4","3"
] } } }, "Outputs" : { "topItem" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "resultsPage"] } }, "numRespondents" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "lastUpdate"] } } } } -
CloudFormation sendet eine SNS Amazon-Benachrichtigung an den Ressourcenanbieter mit einer
"RequestType" : "Update"
, die ähnliche Informationen wie derCreate
Anruf enthält, außer dass dasOldResourceProperties
Feld die alten Ressourceneigenschaften und die aktualisierten (falls vorhanden) Ressourceneigenschaften ResourceProperties enthält.Es folgt ein Beispiel für eine
Update
-Anforderung.{ "RequestType" : "Update", "ResponseURL" : "http://pre-signed-S3-url-for-response", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "uniqueid for this update request", "LogicalResourceId" : "MySeleniumTester", "ResourceType" : "Custom::SeleniumTester", "PhysicalResourceId" : "Tester1", "ResourceProperties" : { "seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com", "http://mynewsite.com" ], "frequencyOfTestsPerHour" : [ "3", "2", "4", "3" ] }, "OldResourceProperties" : { "seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com" ], "frequencyOfTestsPerHour" : [ "3", "2", "4" ] } }
Ausführliche Informationen zum Anforderungsobjekt für
Update
Anfragen finden Sie im Aktualisierungsanfrage für CloudFormation benutzerdefinierte Ressourcen Thema. -
Der benutzerdefinierte Ressourcenanbieter verarbeitet die von gesendeten Daten CloudFormation. Die benutzerdefinierte Ressource führt das Update durch und sendet eine Antwort entweder
SUCCESS
oderFAILED
an den S3URL. CloudFormation vergleicht dannPhysicalResourceIDs
die alten und neuen benutzerdefinierten Ressourcen. Wenn sie unterschiedlich sind, CloudFormation erkennt, dass für das Update ein Ersatz erforderlich ist, und sendet eine Löschanforderung an die alte Ressource. Das folgende Beispiel zeigt die custom resource provider-Antwort auf eineUpdate
-Anforderung.{ "Status" : "SUCCESS", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "uniqueid for this update request", "LogicalResourceId" : "MySeleniumTester", "PhysicalResourceId" : "Tester2" }
Ausführliche Informationen zum Antwortobjekt für
Update
Anfragen finden Sie im Aktualisierungsanfrage für CloudFormation benutzerdefinierte Ressourcen Thema.Die
StackId
,RequestId
undLogicalResourceId
-Felder müssen wörtlich aus der Anforderung kopiert werden. -
CloudFormation deklariert den Stack-Status als
UPDATE_COMPLETE
oderUPDATE_FAILED
. Wenn das Update fehlschlägt, wird der Stack zurückgesetzt. Wenn der Stack erfolgreich aktualisiert wurde, kann der template developer auf neue Ausgabewerte der erstellten benutzerdefinierten mit
zugreifen.Fn::GetAtt
Schritt 3: Löschen des Stacks
-
Der Vorlagenentwickler löscht einen Stack, der eine benutzerdefinierte Ressource enthält. CloudFormationruft die aktuellen Eigenschaften ab, die in der Stack-Vorlage zusammen mit dem SNS Thema angegeben sind, und bereitet sich darauf vor, eine Anfrage an den benutzerdefinierten Ressourcenanbieter zu stellen.
-
CloudFormation sendet eine SNS Amazon-Benachrichtigung an den Ressourcenanbieter mit einer
"RequestType" : "Delete"
, die aktuelle Informationen über den Stack, die benutzerdefinierten Ressourceneigenschaften aus der Stack-Vorlage und ein S3 URL für die Antwort enthält.Immer wenn Sie einen Stack löschen oder ein Update vornehmen, bei dem die benutzerdefinierte Ressource entfernt oder ersetzt wird, wird
PhysicalResourceId
zwischen den alten und neuen benutzerdefinierten Ressourcen CloudFormation verglichen. Wenn sie unterschiedlich sind, CloudFormation erkennt das Update als Ersatz und sendet eine Löschanforderung für die alte Ressource (OldPhysicalResource
), wie im folgenden Beispiel für eineDelete
Anfrage gezeigt.{ "RequestType" : "Delete", "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 delete request", "ResourceType" : "Custom::SeleniumTester", "LogicalResourceId" : "MySeleniumTester", "PhysicalResourceId" : "Tester1", "ResourceProperties" : { "seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com", "http://mynewsite.com" ], "frequencyOfTestsPerHour" : [ "3", "2", "4", "3" ] } }
Ausführliche Informationen zum Anforderungsobjekt für
Delete
Anfragen finden Sie im Anfrage für CloudFormation benutzerdefinierte Ressourcen löschen Thema.DescribeStackResource
,DescribeStackResources
undListStackResources
zeigen den benutzerdefinierten Namen an, wenn er angegeben wurde. -
Der benutzerdefinierte Ressourcenanbieter verarbeitet die von gesendeten Daten CloudFormation und stellt fest, ob die
Delete
Anfrage erfolgreich war. Der Ressourcenanbieter verwendet dann das S3, das von URL gesendet wurde CloudFormation , um eine Antwort entwederSUCCESS
oder zu sendenFAILED
. Wenn Sie eine benutzerdefinierte Ressource löschen möchten, muss custom resource provider erfolgreich auf eine Löschenanfrage antworten.Das folgende Beispiel zeigt die custom resource provider-Antwort auf eine
Delete
-Anforderung.{ "Status" : "SUCCESS", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this delete request", "LogicalResourceId" : "MySeleniumTester", "PhysicalResourceId" : "Tester1" }
Ausführliche Informationen zum Antwortobjekt für
Delete
Anfragen finden Sie im Anfrage für CloudFormation benutzerdefinierte Ressourcen löschen Thema.Die
StackId
,RequestId
undLogicalResourceId
-Felder müssen wörtlich aus der Anforderung kopiert werden. -
CloudFormation deklariert den Stack-Status als
DELETE_COMPLETE
oderDELETE_FAILED
.