Créez une logique de provisionnement personnalisée avec des 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.

Créez une logique de provisionnement personnalisée avec des ressources personnalisées

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::MyCustomResourceTypeName ressource 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 un SNS sujet Amazon ou une fonction Lambda.

Les rubriques suivantes fournissent des informations sur l'utilisation des 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 Create Update les Delete opérations et

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 un SNS sujet Amazon ou une fonction Lambda pour effectuer des opérationsCRUDL. Pour de plus amples informations, veuillez consulter Gestion des extensions avec le CloudFormation registre.

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 le SNS sujet Amazon ou la fonction Lambda à laquelle il CloudFormation peut envoyer des demandes. La SNS rubrique Amazon 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 la SNS rubrique Amazon ARN ou la fonction Lambda ARN 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 le SNS sujet Amazon ARN ou la fonction Lambda ARN 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 un Amazon Simple Storage Service pré-signéURL, auquel 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 de SUCCESS ou FAILED à la version pré-signéeURL. Le fournisseur de ressources personnalisées fournit la réponse dans un fichier JSON formaté et la télécharge sur le S3 pré-signé. URL Pour plus d'informations, consultez la section Chargement d'objets à l'aide d'une signature préalable URLs dans le guide de l'utilisateur d'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. Dans le cas contraire, les valeurs sont visibles à travers APIs les valeurs des propriétés de cette surface (telles queDescribeStackEvents).

    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 SNS notifications Amazon, le fournisseur de ressources personnalisées doit écouter les notifications envoyées à un sujet spécifique et y répondreARN. CloudFormation attend et écoute une réponse dans l'emplacement URL pré-signé.

    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. Toutes les données de sortie de la ressource personnalisée sont stockées dans l'URLemplacement pré-signé. Le template developer peut récupérer les données via la fonction Fn::GetAtt.

Note

Si vous utilisez la fonctionnalité VPCEndpoint, les ressources personnalisées contenues dans le VPC doivent avoir accès à CloudFormation des compartiments S3 spécifiques. Les ressources personnalisées doivent envoyer des réponses à un Amazon S3 URL pré-signé. 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 de plus amples informations, veuillez consulter Accès CloudFormation via un point de terminaison d'interface (AWS PrivateLink).

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 de plus amples informations, veuillez consulter 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.