Quelles sont les meilleures pratiques d'implémentation des ressources CloudFormation personnalisées basées sur Lambda ?

Dernière mise à jour : 29/09/2022

Je veux suivre les bonnes pratiques lors de l'implémentation des ressources personnalisées AWS Lambda avec AWS CloudFormation.

Résolution

Prenez en compte les bonnes pratiques suivantes lors de la mise en œuvre de ressources personnalisées basées sur AWS Lambda avec AWS CloudFormation.

Créer vos ressources personnalisées pour signaler, journaliser et gérer correctement les échecs

Des exceptions peuvent entraîner la sortie sans envoi de réponse de votre code de fonction. CloudFormation exige une réponse HTTPS pour confirmer la réussite ou l'échec de l'opération. En cas d'exception non signalée, CloudFormation attend la fin du délai d'attente de l'opération avant de démarrer une restauration de la pile. Si l'exception se reproduit pendant la restauration, CloudFormation attend à nouveau un délai d'attente avant de se terminer par un échec de restauration. Pendant ce temps, votre pile est inutilisable.

Pour éviter les problèmes de délai d'expiration, incluez les éléments suivants dans le code que vous créez pour votre fonction Lambda :

  • Logique permettant de gérer des exceptions
  • Capacité à journaliser les échecs pour aider au dépannage
  • Capacité à transmettre à CloudFormation une réponse HTTPS pour confirmer l'échec d'une opération
  • Une file d'attente de lettres mortes qui vous permet de capturer et de traiter les courses incomplètes
  • Un module cfn-response pour envoyer une réponse à CloudFormation

Définir des délais d'attente raisonnables et signaler le moment où ils vont être dépassés

Si une opération ne s'exécute pas avant la fin du délai d'attente défini, la fonction génère une exception et aucune réponse n'est envoyée à CloudFormation.

Pour éviter ce problème, prenez en considération les éléments suivants :

  • Définissez un délai d'expiration pour vos fonctions Lambda suffisamment élevé pour gérer les différences en matière de temps de traitement et de conditions du réseau.
  • Définissez un minuteur dans votre fonction pour envoyer une erreur à CloudFormation lorsqu'une fonction est sur le point d'expirer. Un minuteur peut vous aider à éviter les retards pour les ressources personnalisées.

Créez, mettez à jour et supprimez des événements

Selon l'action de la pile, CloudFormation envoie à votre fonction un événement Créé, mis à jour ou supprimé. Chaque événement est géré différemment. Par conséquent, assurez-vous qu'il n'y a pas de comportement inattendu lorsque l'un des trois types d'événements est reçu.

Pour plus d'informations, reportez-vous à Types de demande de ressource personnalisée.

Comprendre comment CloudFormation identifie et remplace des ressources

Lorsqu'une mise à jour déclenche le remplacement d'une ressource physique, CloudFormation compare le PhysicalResourceId renvoyé par votre fonction Lambda au PhysicalResourceId précédent. Si les ID sont différents, CloudFormation suppose que la ressource a été remplacée par une nouvelle ressource physique.

Toutefois, pour permettre d'éventuelles annulations, l'ancienne ressource n'est pas implicitement supprimée. Lorsque la mise à jour de la pile se termine correctement, une demande d'événement Supprimé est envoyée et contient l'ancien ID physique qui sert alors d'identifiant. Si la mise à jour de la pile échoue et qu'une restauration se produit, le nouvel ID physique est envoyé dans l'événement Supprimé .

Utilisez PhysicalResourceId pour identifier des ressources de manière unique afin que seules les ressources appropriées soient supprimées au cours d'une mise à jour de remplacement, lors de la réception d'un événement Supprimé.

Concevoir vos fonctions en tenant compte de l'idempotence

Une fonction idempotente peut être répétée de nombreuses fois avec les mêmes entrées, et le résultat est identique à celui d'une seule exécution. L’idempotence garantit que les nouvelles tentatives, les mises à jour et les annulations ne créent pas de ressources dupliquées ou n'introduisent pas d'erreurs.

Par exemple, CloudFormation appelle votre fonction afin de créer une ressource, mais ne reçoit pas de réponse indiquant que la ressource a été créée avec succès. CloudFormation peut appeler la fonction à nouveau et créer une seconde ressource. La première ressource peut alors devenir orpheline.

Implémenter vos gestionnaires pour gérer correctement les restaurations

En cas d'échec d'une opération de pile, CloudFormation essaie de restaurer et de rétablir toutes les ressources à leur état précédent. Il en résulte des comportements différents selon que la mise à jour a entraîné ou non un remplacement de ressource.

Pour vous assurer que les annulations sont correctement effectuées, prenez en compte les points suivants :

  • Évitez implicitement de supprimer d'anciennes ressources jusqu'à la réception d'un événement Supprimé.
  • Utilisez Accustom ou Custom Resource Helper sur le site GitHub pour vous aider à suivre les bonnes pratiques lorsque vous utilisez des ressources personnalisées dans CloudFormation.

Cet article vous a-t-il été utile ?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?