Ressources personnalisées - AWS CloudFormation

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

Note

Le CloudFormation registre et les ressources personnalisées offrent chacun leurs propres avantages. Les ressources personnalisées offrent les avantages suivants :

  • Il n'est pas nécessaire d'enregistrer la ressource.

  • Vous pouvez inclure une ressource complète dans un modèle sans vous enregistrer.

  • Soutient le CreateUpdate, et les Delete opérations

Les avantages offerts par les ressources basées sur le registre sont les suivants :

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

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

  • La 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, consultez Utilisation du AWS CloudFormation registre.

Les ressources personnalisées vous permettent d'écrire une logique de provisionnement personnalisée dans vos CloudFormation modèles et de l' CloudFormation exécuter chaque fois que vous créez, mettez à jour (si vous avez modifié la ressource personnalisée) ou supprimez une pile. Cela peut être utile lorsque vos exigences de provisionnement impliquent une logique complexe ou des flux de travail qui ne peuvent pas être exprimés avec les types CloudFormation de ressources intégrés.

Par exemple, vous souhaiterez peut-être inclure des ressources qui ne sont pas disponibles en tant que types de CloudFormation ressources. Vous pouvez inclure ces ressources à l'aide de ressources personnalisées. Ainsi, vous pouvez toujours gérer toutes vos ressources connexes dans une seule pile.

Pour définir une ressource personnalisée dans votre CloudFormation modèle, vous devez utiliser le type de Custom::MyCustomResourceTypeNameressource AWS::CloudFormation::CustomResourceou. Les ressources personnalisées nécessitent une propriété, le jeton de service, qui indique à qui les demandes sont CloudFormation envoyées, par exemple une rubrique Amazon SNS ou une fonction Lambda.

Les rubriques suivantes fournissent des informations sur l'utilisation des ressources personnalisées.

Note

Si vous utilisez la fonctionnalité de point de terminaison du VPC, les ressources personnalisées du VPC doivent avoir accès à CloudFormation des compartiments S3 spécifiques. Les ressources personnalisées doivent envoyer des réponses à une URL Amazon S3 pré-signée. S'ils ne peuvent pas envoyer de réponses à Amazon S3, ils CloudFormation ne recevront pas de réponse et l'opération de stack échouera. Pour plus d’informations, consultez Accès CloudFormation via un point de terminaison d'interface (AWS PrivateLink).

Fonctionnement des ressources personnalisées

Le processus général de configuration d'une nouvelle ressource personnalisée comprend les étapes suivantes. Ces étapes impliquent deux rôles : le fournisseur de ressources personnalisées qui possède la ressource personnalisée et le développeur de modèles qui crée un modèle incluant un type de ressource personnalisé. Il peut s'agir de la même personne, mais dans le cas contraire, le fournisseur de ressources personnalisées doit travailler avec le développeur du modèle.

  1. Le fournisseur de ressources personnalisées écrit une logique qui détermine la manière de traiter les demandes émanant de la ressource personnalisée CloudFormation et d'exécuter des actions sur celle-ci.

  2. Le fournisseur de ressources personnalisées crée la rubrique Amazon SNS ou la fonction Lambda à laquelle il CloudFormation peut envoyer des demandes. La rubrique Amazon SNS ou la fonction Lambda doivent se trouver dans la même région que celle où la pile sera créée.

  3. Le fournisseur de ressources personnalisées fournit l'ARN de la rubrique Amazon SNS ou l'ARN de la fonction Lambda au développeur du modèle.

  4. Le développeur du modèle définit la ressource personnalisée dans son CloudFormation modèle. Cela inclut un jeton de service et tous les paramètres de données d'entrée. Le jeton de service et la structure des données d'entrée sont définis par le fournisseur de ressources personnalisé. Le jeton de service spécifie l'ARN de la rubrique Amazon SNS ou l'ARN de la fonction Lambda et est toujours obligatoire, mais les données d'entrée sont facultatives en fonction de la ressource personnalisée.

Désormais, chaque fois que quelqu'un utilise le modèle pour créer, mettre à jour ou supprimer la ressource personnalisée, CloudFormation envoie une demande au jeton de service spécifié, puis attend une réponse avant de poursuivre l'opération de pile.

Voici un résumé du flux de création d'une pile à partir du modèle :

  1. CloudFormation envoie une demande au jeton de service spécifié. La demande 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 des réponses. Pour plus d'informations sur les éléments inclus dans la requête, consultez Objets de requêtes de ressources personnalisées.

    Les exemples de données suivants montrent ce qui est CloudFormation inclus dans une Create demande. Dans cet exemple, ResourceProperties permet CloudFormation de créer une charge utile personnalisée à envoyer à la fonction Lambda.

    { "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. Le fournisseur de ressources personnalisées traite la CloudFormation demande et renvoie une réponse à l'URL pré-signée SUCCESS ou FAILED à celle-ci. 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, veuillez consulter la rubrique Téléchargement d'objets utilisant des URL pré-signées dans le Guide du développeur Amazon Simple Storage Service.

    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 affichent des valeurs de propriétés de surface (telles que DescribeStackEvents).

    Pour plus d'informations sur l'utilisation NoEcho pour masquer des informations sensibles, consultez les N'incorporez pas d'informations d'identification dans vos modèles meilleures pratiques.

    Le custom resource provider est chargé d'écouter la requête et d'y répondre. Par exemple, pour les notifications Amazon SNS, le fournisseur de ressources personnalisées doit écouter et répondre aux notifications envoyées à un ARN de rubrique spécifique. CloudFormation attend et écoute une 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/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this create request", "LogicalResourceId" : "MyTestResource", "Data" : { "OutputName1" : "Value1", "OutputName2" : "Value2", } }
  3. Après avoir obtenu une SUCCESS réponse, CloudFormation poursuit 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.

Délai de réponse

Le délai d'expiration par défaut pour votre ressource personnalisée est de 3 600 secondes (1 heure). Si aucune réponse n'est reçue pendant cette période, l'opération de pile échoue.

Vous pouvez ajuster la valeur du délai d'attente en fonction du temps que vous attendez de la réponse de la ressource personnalisée. Par exemple, lorsque vous provisionnez une ressource personnalisée qui invoque une fonction Lambda censée répondre dans les cinq minutes, vous pouvez définir un délai d'attente de cinq minutes dans le modèle de pile en spécifiant la propriété. ServiceTimeout Pour plus d’informations, consultez Objets de requêtes de ressources personnalisées. Ainsi, si une erreur dans la fonction Lambda provoque son blocage, l'opération de pile CloudFormation échouera au bout de cinq minutes au lieu d'attendre une heure complète.

Veillez toutefois à ne pas définir une valeur de délai d'attente trop faible. Pour éviter des délais imprévus, assurez-vous que votre ressource personnalisée dispose de suffisamment de temps pour effectuer les actions nécessaires et renvoyer une réponse.