Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Ressources personnalisées SNS soutenues par Amazon
La rubrique suivante explique comment configurer une ressource personnalisée avec un jeton de service qui indique la SNS rubrique Amazon à laquelle les demandes sont CloudFormation envoyées. Vous apprenez également la séquence des événements et des messages envoyés et reçus à la suite de la création, de la mise à jour et de la suppression d'une pile de ressources personnalisée.
Avec les ressources personnalisées et AmazonSNS, vous pouvez activer des scénarios tels que l'ajout de nouvelles ressources à une pile et l'injection de données dynamiques dans une pile. Par exemple, lorsque vous créez une pile, vous CloudFormation pouvez envoyer une Create
demande à un sujet surveillé par une application exécutée sur une EC2 instance Amazon. La SNS notification Amazon incite l'application à effectuer des tâches de provisionnement supplémentaires, telles que la récupération d'un pool d'adresses IP élastiques répertoriées comme autorisées. Une fois cela fait, l'application envoie une réponse (et toutes les données de sortie) qui indique CloudFormation de poursuivre l'opération de pile.
Lorsque vous spécifiez un SNS sujet Amazon comme cible d'une ressource personnalisée, vous envoyez CloudFormation des messages au SNS sujet spécifié lors des opérations de stack impliquant la ressource personnalisée. Pour traiter ces messages et effectuer les actions nécessaires, vous devez disposer d'un point de terminaison compatible abonné à la SNS rubrique.
Pour une présentation des ressources personnalisées et de leur fonctionnement, voirCréez une logique de provisionnement personnalisée avec des ressources personnalisées. Pour plus d'informations sur Amazon SNS et son fonctionnement, consultez le guide du développeur Amazon Simple Notification Service.
Utiliser Amazon SNS pour créer des ressources personnalisées
Rubriques
Étape 1 : Création de la pile
-
Le développeur du modèle crée une CloudFormation pile contenant une ressource personnalisée.
Dans l'exemple de modèle ci-dessous, nous utilisons le nom du type de ressource personnalisé
Custom::
pour la ressource personnalisée dotée d'un identifiant logiqueSeleniumTester
. Le nom des types de ressources personnalisées doit être alphanumérique et ne doit pas dépasser 60 caractères.MySeleniumTest
Le type de ressource personnalisé est déclaré avec un jeton de service, des propriétés facultatives spécifiques au fournisseur et des Fn::GetAtt attributs facultatifs définis par le fournisseur de ressources personnalisées. Ces propriétés et ces attributs peuvent être utilisés pour transmettre les informations du template developer au custom resource provider, et vice versa. Le jeton de service indique une SNS rubrique Amazon configurée par le fournisseur de ressources.
{ "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
"] } } } }Note
Les noms et les valeurs des données accessibles avec
sont renvoyés par le fournisseur de ressources personnalisées lors de la réponse du fournisseur à CloudFormation. Si le custom resource provider est un tiers, le template developer doit obtenir les noms de ces valeurs de retour auprès du custom resource provider.Fn::GetAtt
-
CloudFormation envoie une SNS notification Amazon au fournisseur de ressources
"RequestType" : "Create"
contenant des informations sur la pile, les propriétés de ressources personnalisées du modèle de pile et un S3 URL pour la réponse.Le SNS sujet utilisé pour envoyer la notification est intégré dans le modèle de la
ServiceToken
propriété. Pour éviter les valeurs codées en dur, un template developer peut utiliser un paramètre de modèle de sorte que la valeur soit entrée lors du lancement de la pile.L'exemple suivant présente une requête de création de ressource personnalisée (
Create
), qui inclut un nom de type de ressource personnalisée,Custom::SeleniumTester
, créé avec la valeurLogicalResourceId
MySeleniumTester
:{ "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" ] } }
Pour des informations détaillées sur l'objet de demande pour les
Create
demandes, consultez la Création d'une demande de ressources CloudFormation personnalisées rubrique. -
Le custom resource provider traite les données envoyées par le template developer et détermine si la demande
Create
a réussi. Le fournisseur de ressources utilise ensuite le S3 URL envoyé par CloudFormation pour envoyer une réponse de l'unSUCCESS
ou de l'autreFAILED
.Selon le type de réponse, différents champs de réponse seront attendus par CloudFormation. Pour plus d'informations sur les champs de réponse pour un type de demande particulier, consultez la documentation relative à ce type de demande dans la Types de demandes de ressource personnalisée section.
En réponse à une demande de création ou de mise à jour, le custom resource provider peut renvoyer des éléments de données dans le champ Data de la réponse. Il s'agit de paires nom-valeur, où les noms correspondent aux attributs
utilisés avec la ressource personnalisée dans le modèle de la pile. Les valeurs sont les données qui sont renvoyées quand le template developer appelleFn::GetAtt
au niveau de la ressource avec le nom d'attribut.Fn::GetAtt
Voici un exemple de réponse de ressource personnalisée :
{ "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" } }
Pour obtenir des informations détaillées sur l'objet de réponse pour les
Create
demandes, consultez la Création d'une demande de ressources CloudFormation personnalisées rubrique.Les champs
StackId
,RequestId
etLogicalResourceId
doivent être copiés mot pour mot à partir de la demande. -
CloudFormation déclare le statut de la pile comme étant
CREATE_COMPLETE
ouCREATE_FAILED
. Si la pile a été créée avec succès, le template developer peut utiliser les valeurs de sortie de la ressource personnalisée créée en y accédant avec Fn::GetAtt.Par exemple, le modèle de ressource personnalisée utilisé à titre d'illustration a eu recours à
pour copier les sorties des ressources dans les sorties de la pile :Fn::GetAtt
"Outputs" : { "
topItem
" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest
", "resultsPage
"] } }, "numRespondents
" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest
", "lastUpdate
"] } } }
Étape 2 : Mises à jour d'une pile
Pour mettre à jour une pile existante, vous devez soumettre un modèle qui spécifie les mises à jour des propriétés des ressources de la pile, comme indiqué dans l'exemple ci-dessous. CloudFormationmet à jour uniquement les ressources dont les modifications sont spécifiées dans le modèle. Pour de plus amples informations, veuillez consulter Comprendre les comportements de mise à jour des ressources de pile.
Vous pouvez mettre à jour les ressources personnalisées qui nécessitent un remplacement de la ressource physique sous-jacente. Lorsque vous mettez à jour une ressource personnalisée dans un CloudFormation modèle, CloudFormation envoie une demande de mise à jour à cette ressource personnalisée. Si une ressource personnalisée nécessite un remplacement, la nouvelle ressource personnalisée doit envoyer une réponse avec le nouvel ID physique. Lorsqu'il CloudFormation reçoit la réponse, il compare PhysicalResourceId
les anciennes et les nouvelles ressources personnalisées. S'ils sont différents, CloudFormation reconnaît la mise à jour comme un remplacement et envoie une demande de suppression à l'ancienne ressource, comme indiqué dansÉtape 3 : Suppression d'une pile.
Note
Si vous n'avez pas apporté de modifications à la ressource personnalisée, vous CloudFormation ne lui enverrez pas de demandes lors d'une mise à jour de la pile.
-
Le template developer lance une mise à jour de la pile qui contient une ressource personnalisée. Pendant une mise à jour, le template developer peut spécifier de nouvelles propriétés dans le modèle de la pile.
Voici un exemple de mise à jour (
Update
) apportée au modèle de la pile à l'aide d'un type de ressource personnalisée :{ "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 envoie une SNS notification Amazon au fournisseur de ressources contenant des informations similaires à celles de l'
Create
appel, sauf que leOldResourceProperties
champ contient les anciennes propriétés des ressources et ResourceProperties contient les propriétés des ressources mises à jour (le cas échéant)."RequestType" : "Update"
Voici un exemple de requête
Update
:{ "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" ] } }
Pour des informations détaillées sur l'objet de demande pour les
Update
demandes, consultez la Demande de mise à jour pour les ressources CloudFormation personnalisées rubrique. -
Le fournisseur de ressources personnalisées traite les données envoyées par CloudFormation. La ressource personnalisée effectue la mise à jour et envoie une réponse au S3
SUCCESS
ouFAILED
à celui-ciURL. CloudFormation compare ensuite lesPhysicalResourceIDs
anciennes et les nouvelles ressources personnalisées. S'ils sont différents, CloudFormation reconnaît que la mise à jour doit être remplacée et envoie une demande de suppression à l'ancienne ressource. L'exemple suivant présente la réponse du custom resource provider à une demandeUpdate
.{ "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" }
Pour obtenir des informations détaillées sur l'objet de réponse pour les
Update
demandes, consultez la Demande de mise à jour pour les ressources CloudFormation personnalisées rubrique.Les champs
StackId
,RequestId
etLogicalResourceId
doivent être copiés mot pour mot à partir de la demande. -
CloudFormation déclare le statut de la pile comme étant
UPDATE_COMPLETE
ouUPDATE_FAILED
. En cas d'échec de la mise à jour, la pile est restaurée. Si la pile a bien été mise à jour, le template developer peut accéder aux nouvelles valeurs de sortie de la ressource personnalisée créée avec
.Fn::GetAtt
Étape 3 : Suppression d'une pile
-
Le développeur du modèle supprime une pile contenant une ressource personnalisée. CloudFormationobtient les propriétés actuelles spécifiées dans le modèle de pile avec le SNS sujet, et prépare une demande au fournisseur de ressources personnalisées.
-
CloudFormation envoie une SNS notification Amazon au fournisseur de ressources
"RequestType" : "Delete"
contenant des informations actuelles sur la pile, les propriétés de ressources personnalisées issues du modèle de pile et un S3 URL pour la réponse.Chaque fois que vous supprimez une pile ou effectuez une mise à jour qui supprime ou remplace la ressource personnalisée CloudFormation ,
PhysicalResourceId
comparez les anciennes et les nouvelles ressources personnalisées. S'ils sont différents, CloudFormation reconnaît la mise à jour comme un remplacement et envoie une demande de suppression pour l'ancienne ressource (OldPhysicalResource
), comme illustré dans l'exemple deDelete
demande suivant.{ "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" ] } }
Pour des informations détaillées sur l'objet de demande pour les
Delete
demandes, consultez la Supprimer la demande de ressources CloudFormation personnalisées rubrique.DescribeStackResource
,DescribeStackResources
, etListStackResources
affiche le nom défini par l'utilisateur, s'il a été spécifié. -
Le fournisseur de ressources personnalisées traite les données envoyées par CloudFormation et détermine si la
Delete
demande a abouti. Le fournisseur de ressources utilise ensuite le S3 URL envoyé par CloudFormation pour envoyer une réponse de l'unSUCCESS
ou de l'autreFAILED
. Pour supprimer une pile avec une ressource personnalisée, le custom resource provider doit répondre avec succès à une demande de suppression.Voici un exemple de réponse du custom resource provider à une demande
Delete
:{ "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" }
Pour obtenir des informations détaillées sur l'objet de réponse pour les
Delete
demandes, consultez la Supprimer la demande de ressources CloudFormation personnalisées rubrique.Les champs
StackId
,RequestId
etLogicalResourceId
doivent être copiés mot pour mot à partir de la demande. -
CloudFormation déclare le statut de la pile comme étant
DELETE_COMPLETE
ouDELETE_FAILED
.