Quelles sont les bonnes pratiques recommandées pour l'implémentation de ressources personnalisées basées sur AWS Lambda avec AWS CloudFormation ?

Date de la dernière mise à jour : 28/06/2019

Quelles sont les bonnes pratiques recommandées pour l'implémentation de ressources personnalisées basées sur AWS Lambda avec AWS CloudFormation ?

Résolution

Gardez en tête les bonnes pratiques ci-dessous :

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. AWS 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, AWS 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 produit à nouveau sur la restauration, AWS CloudFormation attend encore la fin du délai d'attente avant de prendre fin avec un échec de la restauration. Pendant ce temps, votre pile est inutilisable.

Pour éviter les problèmes de délai d'attente dont le dépannage peut prendre du temps, 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 à AWS CloudFormation une réponse HTTPS pour confirmer l'échec d'une opération
  • Une file d'attente de lettres mortes qui vous permet de collecter et de gérer des exécutions non terminées.

Définir des délais d'expiration raisonnables et indiquer quand ils sont sur le point d'ê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 à AWS 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 à AWS CloudFormation lorsqu'une fonction est sur le point d'expirer. Un minuteur peut vous aider à éviter les retards pour les ressources personnalisées.

Comprendre et concevoir des événements Créer, Mettre à jour et Supprimer

En fonction de l'action de la pile, AWS CloudFormation envoie à votre fonction un événement Create, Update ou Delete. 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 AWS CloudFormation identifie et remplace les ressources

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

Toutefois, l'ancienne ressource n'est pas implicitement supprimée pour permettre une restauration, si nécessaire. Lorsque la mise à jour de la pile se termine correctement, une demande d'événement Delete 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 Delete .

Réfléchissez bien au moment où vous renvoyez un nouveau PhysicalResourceId. 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 Delete.

Concevoir vos fonctions en tenant compte de l'idempotence

Il est possible de répéter une fonction idempotente autant de fois que nécessaire avec les mêmes entrées, et le résultat sera le même que si elle n'avait été effectuée qu'une seule fois. L'idempotence est utile lorsque vous utilisez AWS CloudFormation afin de vous assurer que les nouvelles tentatives, les restaurations et les mises à jour ne créent pas de duplication de ressources ou ne génèrent pas d'erreurs.

Par exemple, supposons qu'AWS 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. AWS CloudFormation peut appeler la fonction à nouveau et créer une seconde ressource. Il se peut que la première ressource devienne orpheline.

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

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

Pour veiller à l'exécution correcte des restaurations, prenez en considération les éléments suivants :

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

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

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?