Ressources personnalisées - AWS CloudFormation

Ressources personnalisées

Note

Le registre CloudFormation offre plusieurs avantages par rapport aux ressources personnalisées, tels que :

  • Prise en charge de la modélisation, du provisionnement et de la gestion des ressources d'applications tierces

  • Prise en charge des opérations Create, Read, Update, Delete et List (CRUDL)

  • Prise en charge de la détection de l'écart sur les types de ressources privées et tierces

Contrairement aux ressources personnalisées, les ressources basées sur le registre n'ont pas besoin d'associer une rubrique Amazon SNS ou une fonction Lambda pour effectuer des opérations CRUDL. Pour plus d'informations sur le registre CloudFormation, consultez Utilisation du registre AWS CloudFormation.

Les ressources personnalisées vous permettent d'écrire une logique de mise en service personnalisée dans les modèles qu'AWS CloudFormation exécute chaque fois que vous créez, mettez à jour (si vous avez modifié la ressource personnalisée) ou supprimez des piles. Par exemple, vous pouvez inclure des ressources qui ne sont pas accessibles en tant que types de ressources AWS CloudFormation. Vous pouvez inclure ces ressources à l'aide de ressources personnalisées. De cette façon, vous pouvez continuer à gérer toutes les ressources connexes dans une seule pile.

Utilisez la ressource AWS::CloudFormation::CustomResource ou Custom : :MyCustomResourceTypeName type de our définir les ressources personnalisées dans vos modèles. Les ressources personnalisées nécessitent une propriété : le jeton de service, qui spécifie où AWS CloudFormation envoie les demandes, tel qu'une rubrique Amazon SNS.

Note

Si vous utilisez la fonctionnalité de point de terminaison d'un VPC, les ressources personnalisées de ce VPC doivent avoir accès aux compartiments S3 spécifiques à AWS CloudFormation. Les ressources personnalisées doivent envoyer des réponses à une URL Amazon S3 pré-signée. Si elles ne peuvent pas envoyer des réponses à Amazon S3, AWS CloudFormation ne recevra pas de réponse et l'opération de la pile échouera. Pour plus d'informations, consultez Configuration des points de terminaison d'un VPC pour AWS CloudFormation.

Fonctionnement des ressources personnalisées

Toutes les actions effectuées pour une ressource personnalisée impliquent trois parties.

template developer

Crée un modèle qui inclut un type de ressource personnalisée. Le template developer spécifie le jeton de service et des données du modèle.

custom resource provider

Possède la ressource personnalisée et détermine comment gérer les requêtes provenant d'AWS CloudFormation et comment y répondre. Le custom resource provider doit fournir un jeton de service que le template developer utilise.

AWS CloudFormation

Lors d'une opération de pile, envoie une demande à un jeton de service qui est spécifié dans le modèle, puis attend une réponse avant de procéder à cette opération.

Le template developer et le custom resource provider peuvent être la même personne ou entité, mais le processus est le même. Les étapes suivantes décrivent le processus général :

  1. Le template developer définit une ressource personnalisée dans son modèle, qui inclut un jeton de service et les paramètres de données d'entrée. En fonction de la ressource personnalisée, les données d'entrée peuvent être obligatoires. Toutefois, le jeton de service est toujours requis.

    Le jeton de service spécifie où AWS CloudFormation envoie les demandes (par exemple, l'ARN d'une rubrique Amazon SNS ou d'une fonction AWS Lambda). Pour plus d'informations, consultez AWS::CloudFormation::CustomResource. Le jeton de service et la structure des données d'entrée sont définis par le custom resource provider.

  2. Chaque fois que quelqu'un utilise le modèle pour créer, mettre à jour ou supprimer une ressource personnalisée, AWS CloudFormation envoie une demande au jeton de service spécifié. Le jeton de service doit provenir de la même région que celle dans laquelle vous créez la pile.

    Dans cette demande, AWS CloudFormation inclut des informations telles que le type de demande et une URL Amazon Simple Storage Service pré-signée, à laquelle la ressource personnalisée envoie les réponses. Pour plus d'informations sur les éléments inclus dans la requête, consultez Objets de requêtes de ressources personnalisées.

    L'échantillon de données suivant présente ce qu'AWS CloudFormation inclut dans une requête :

    { "RequestType" : "Create", "ResponseURL" : "http://pre-signed-S3-url-for-response", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/stack-name/guid", "RequestId" : "unique id for this create request", "ResourceType" : "Custom::TestResource", "LogicalResourceId" : "MyTestResource", "ResourceProperties" : { "Name" : "Value", "List" : [ "1", "2", "3" ] } }
    Note

    Dans cet exemple, ResourceProperties permet à AWS CloudFormation de créer une charge utile personnalisée à envoyer à la fonction Lambda.

  3. Le custom resource provider traite la demande AWS CloudFormation et renvoie la réponse SUCCESS ou FAILED à l'URL pré-signée. Le custom resource provider fournit la réponse dans un fichier au format JSON et la télécharge vers l'URL S3 pré-signée. Pour plus d'informations, consultez Téléchargement d'objets utilisant des URL pré-signées dans le Amazon Simple Storage Service Manuel du développeur.

    Dans cette réponse, le custom resource provider peut aussi inclure les paires nom-valeur auxquelles le template developer peut accéder. Par exemple, la réponse peut inclure les données de sortie si la requête a abouti ou un message d'erreur en cas d'échec. Pour plus d'informations sur les réponses, consultez Objets de réponse des ressources personnalisées.

    Important

    Si les paires nom-valeur contiennent des informations sensibles, vous devez utiliser le champ NoEcho pour masquer la sortie de la ressource personnalisée. Sinon, les valeurs sont visibles via des API qui exposent des valeurs de propriété (comme DescribeStackEvents).

    Pour plus d’informations sur l’utilisation de NoEcho pour masquer des informations sensibles, consultez la documentation sur la bonne pratique consistant à ne pas intégrer les informations d’identification dans vos modèles.

    Le custom resource provider est chargé d'écouter la requête et d'y répondre. Par exemple, pour les notifications Amazon SNS, le custom resource provider doit écouter les notifications envoyées à l'ARN d'une rubrique spécifique et y répondre. AWS CloudFormation attend et écoute la réponse à l'emplacement de l'URL pré-signée.

    L'échantillon de données suivant montre ce qu'une ressource personnalisée peut inclure dans une réponse :

    { "Status" : "SUCCESS", "PhysicalResourceId" : "TestResource1", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/stack-name/guid", "RequestId" : "unique id for this create request", "LogicalResourceId" : "MyTestResource", "Data" : { "OutputName1" : "Value1", "OutputName2" : "Value2", } }
  4. Après avoir obtenu une réponse SUCCESS, AWS CloudFormation procède à l'opération de pile. Sans réponse ou si une réponse FAILED est renvoyée, l'opération échoue. Les données de sortie de la ressource personnalisée sont stockées à l'emplacement de l'URL pré-signée. Le template developer peut récupérer les données via la fonction Fn::GetAtt.