Passer au contenu

Comment puis-je résoudre les problèmes liés aux ressources personnalisées dans CloudFormation ?

Lecture de 5 minute(s)
0

Je souhaite résoudre les erreurs liées aux ressources personnalisées dans AWS CloudFormation.

Résolution

Une opération de ressource personnalisée échoue car la fonction AWS Lambda a rencontré une erreur ou l'opération a expiré. L’erreur se produit lorsque la ressource personnalisée renvoie un signal ÉCHEC à CloudFormation. Une erreur d’expiration de délai se produit lorsque CloudFormation ne reçoit aucune réponse de la part de la ressource personnalisée dans les délais prévus.

Pour résoudre les erreurs, effectuez les opérations suivantes.

Consulter les journaux Amazon CloudWatch pour Lambda

Procédez comme suit :

  1. Ouvrez la console CloudFormation.
  2. Choisissez la pile défaillante.
  3. Sélectionnez l’onglet Ressources et trouvez l'ID physique de la fonction Lambda qui appuie la ressource personnalisée.
  4. Sélectionnez la fonction Lambda.
  5. Sélectionnez l’onglet Surveiller.
  6. Choisissez Consulter les journaux CloudWatch pour afficher les journaux de la fonction Lambda.

CloudFormation a peut-être supprimé la fonction Lambda lors de la restauration. Cependant, le groupe de journaux peut conserver les journaux CloudWatch. Pour trouver les journaux, procédez comme suit :

  1. Ouvrez la console CloudWatch.
  2. Dans le volet de navigation, sélectionnez Groupes de journaux.
  3. Dans la zone de recherche, entrez la commande suivante :
     /aws/lambda/LambdaFunctionName
    Remarque : Remplacez LambdaFunctionName par le nom de votre fonction Lambda. Vous pouvez trouver le nom de votre fonction Lambda dans les ressources CloudFormation, identifiée comme étant le type de ressource AWS::Lambda::Function.

Si CloudWatch ne trouve pas les journaux, redéployez la pile avec l'option de désactivation de la restauration pour préserver les ressources correctement provisionnées. Si vous redéployez à l'aide de l'option de désactivation de la restauration, CloudFormation ne peut pas supprimer les ressources qui ont été créées avec succès.

Vérifier la fonction Lambda en échec (FAILED)

Si la fonction Lambda qui gère la ressource personnalisée a échoué et si une logique de gestion des exceptions est en place, le message d'erreur suivant peut s'afficher :

« Received response status FAILED from custom resource. Message returned: .....See the details in CloudWatch Log Stream or related to the resource that the custom resource is creating or managing. »

Pour résoudre cette erreur, consultez le message d'erreur pour déterminer la raison de l'échec, puis consultez les journaux CloudWatch pour Lambda.

Vérifier pourquoi CloudFormation ne reçoit pas de réponse

Si CloudFormation ne reçoit pas de réponse, effectuez les opérations suivantes :

Assurez-vous d'avoir correctement implémenté le module cfn-response dans la fonction Lambda pour renvoyer un signal à CloudFormation. Si vous n'avez pas correctement implémenté le module ou s'il est manquant, CloudFormation ne recevra pas de réponse.

Assurez-vous que vous avez défini un délai d'expiration de la fonction Lambda suffisamment long pour terminer sa tâche. La valeur maximale du délai d'expiration d'une fonction Lambda est de 15 minutes. Par défaut, CloudFormation attend jusqu'à 1 heure pour obtenir une réponse, ce délai d’expiration est distinct du délai Lambda. Pour réduire le temps d'attente, configurez la propriété ServiceTimeout dans la ressource personnalisée.

Vérifiez l'accès au point de terminaison Amazon Simple Storage Service (Amazon S3). Pour que CloudFormation reçoive un signal, les ressources personnalisées doivent accéder à une URL Amazon S3 présignée. Si vous avez configuré votre fonction Lambda dans un cloud privé virtuel (VPC), assurez-vous qu'elle se trouve dans un sous-réseau. Le sous-réseau doit acheminer le trafic sortant via une passerelle NAT pour accéder à Internet ou utiliser un point de terminaison Amazon S3 VPC.

Surveillez les métriques Lambda pour détecter les exécutions simultanées. Si vos journaux Lambda indiquent un signal envoyé après un délai d'attente, vérifiez la simultanéité de vos fonctions Lambda. Un délai d'expiration se produit lorsqu'un grand nombre de fonctions Lambda s'exécutent simultanément dans la même région AWS. Pour réduire les délais d'expiration, utilisez la simultanéité réservée pour votre fonction Lambda.

Supprimez manuellement la pile de l’état IN_PROGRESS. Si la ressource personnalisée CloudFormation conserve le statut *_IN_PROGRESS jusqu'à ce que la ressource personnalisée atteigne son délai d'expiration, CloudFormation peut mettre un certain temps à marquer les ressources comme FAIL. Pour stabiliser la ressource personnalisée, utilisez la commande cURL suivante pour effectuer une requête HTTP directe. Pour effectuer la requête, vous devez avoir les détails de l'objet de requête.

$ curl -H 'Content-Type: ''' -X PUT -d '{    "Status": "SUCCESS",    "PhysicalResourceId": "examplephysicalresourceid",
    "StackId": "examplestackid",
    "RequestId": "e2fc8f5c-0391-4a65-a645-7c695646739",
    "LogicalResourceId": "CloudWatchtrigger"
  }' 'https://cloudformation-custom-resource-response'

Remarque : Remplacez examplephysicalresourceid par l’ID de la ressource physique et examplestackid par l’ID de la pile.

Si la fonction Lambda a enregistré l'objet de la requête, vous pouvez trouver le RequestID et l'URL S3 présignée dans les journaux Amazon CloudWatch associés. Pour en savoir plus, consultez la section Comment puis-je supprimer une ressource personnalisée basée sur Lambda qui est bloquée à l’état DELETE_FAILED ou DELETE_IN_PROGRESS dans CloudFormation ?

Informations connexes

Quelles sont les bonnes pratiques pour implémenter des ressources personnalisées basées sur Lambda avec CloudFormation ?

AWS OFFICIELA mis à jour il y a 7 mois