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.

Brève description

Des défaillances de ressources personnalisées se produisent car la fonction AWS Lambda associée à la ressource a rencontré un problème lors de son exécution. La ressource personnalisée envoie ensuite un état FAILED (Échec) à CloudFormation.

Une ressource personnalisée peut également échouer lorsque CloudFormation ne reçoit pas de réponse de la ressource personnalisée dans les délais attendus et expire.

Pour résoudre les problèmes liés aux ressources personnalisées, exécutez le dossier d’exploitation AWSSupport-TroubleshootCFNCustomResource ou dépannez manuellement votre pile CloudFormation.

Pour les ressources personnalisées Lambda, le dossier d’exploitation vérifie que Lambda atteint Amazon Simple Storage Service (Amazon S3) pour envoyer une réponse à CloudFormation. La réponse à CloudFormation vérifie la configuration du réseau Lambda et les groupes de sécurité.

Résolution

Exécuter le dossier d’exploitation AWSSupport-TroubleshootCFNCustomResource

Avant de commencer, assurez-vous que votre utilisateur AWS Identity and Access Management (IAM) ou le rôle dispose des autorisations IAM requises.

Suivez les étapes suivantes pour lancer l'automatisation :

  1. Ouvrez la console AWS Systems Manager.
  2. Dans le volet de navigation, sélectionnez Documents.
  3. Dans la barre de recherche, saisissez AWSSupport-TroubleshootCfnCustomResource.
  4. Sélectionnez le document AWSSupport-TroubleshootCfnCustomResource.
  5. Sélectionnez Exécuter l'automatisation.
  6. Pour les paramètres d’entrée, saisissez les informations suivantes :
    (Facultatif) AutomationAssumeRole. Saisissez l’ARN ou le nom de rôle qui permet à Automation, une fonctionnalité de Systems Manager, d'effectuer les actions en votre nom. Si vous ne spécifiez aucun rôle, Automation utilise les autorisations de l'utilisateur qui lance le dossier d’exploitation.
    StackName. Saisissez le nom de la pile CloudFormation sur laquelle la ressource personnalisée a échoué.
  7. Sélectionnez Exécuter.
  8. Examinez la section Sorties pour obtenir les résultats détaillés suivants :
    L'étape validateCloudFormationStack vérifie que la pile CloudFormation existe dans le même compte AWS et dans la même région AWS.
    L'étape checkCustomResource analyse la pile CloudFormation, vérifie la ressource personnalisée défaillante et fournit des informations sur la manière de dépanner la ressource personnalisée défaillante.

Résoudre les problèmes de votre pile CloudFormation manuellement

Consulter les journaux Amazon CloudWatch

Procédez comme suit :

  1. Ouvrez la console CloudFormation.
  2. Sélectionnez la pile défaillante, puis choisissez l'onglet Ressources pour obtenir l'ID physique de la fonction Lambda associée à la ressource personnalisée.
  3. Sélectionnez votre fonction Lambda.
  4. Choisissez l'onglet Surveiller, puis Afficher les journaux CloudWatch.

Si la fonction Lambda a été supprimée lors de la restauration de CloudFormation, il est possible que le groupe de journaux contienne toujours les journaux CloudWatch.

Pour accéder aux journaux, procédez comme suit :

  1. Ouvrez la console CloudWatch.
  2. Dans le volet de navigation, sélectionnez Groupes de journaux.
  3. Dans le champ de recherche, exécutez la commande suivante :
    /aws/lambda/LambdaPhysicalName

Remarque : Remplacez LambdaPhysicalName par le nom de votre fonction Lambda.

Si vous ne trouvez pas les journaux, désactivez la fonction de restauration et redéployez la pile pour résoudre le problème du comportement de la fonction Lambda.

Résoudre les causes potentielles de défaillance

Résoudre le statut FAILED (Échec)

Le message d'erreur suivant peut s'afficher :

« Received response status FAILED from custom resource. Message returned:  <reason here>. »

Le message d'erreur précédent s'affiche lorsque la fonction Lambda associée à la ressource personnalisée rencontre un problème et que la logique de gestion des exceptions est en place.

Pour résoudre ce problème, consultez la raison de l'échec indiquée dans le message d'erreur et dans les journaux CloudWatch pour Lambda.

CloudFormation ne reçoit pas de réponse

La pile échoue car CloudFormation ne reçoit aucune réponse de la ressource personnalisée.

Pour résoudre ce problème, prenez les mesures suivantes :

  • Assurez-vous d'utiliser correctement le module cfn-response dans la fonction Lambda de votre ressource personnalisée pour envoyer une réponse à la pile CloudFormation.

  • Examinez les journaux CloudWatch pour déterminer si des erreurs se produisent lors de l'exécution du code.

  • Augmentez le paramètre de délai d'expiration de votre fonction Lambda afin que la fonction dispose de suffisamment de temps pour terminer la tâche. La durée maximale que vous pouvez régler est de 15 minutes.

  • Si votre fonction Lambda se trouve dans un cloud privé virtuel (VPC), confirmez qu'elle se trouve dans un sous-réseau. Le sous-réseau doit autoriser le trafic sortant via une passerelle NAT. Le sous-réseau doit également être acheminé vers un point d'accès Amazon S3 afin que les ressources personnalisées puissent accéder à l'URL Amazon S3 présignée.

  • Si une réponse a été envoyée après un délai d'attente, vérifiez vos métriques Lambda pour détecter un nombre élevé d'exécutions de fonctions simultanées dans la même région. Pour réduire les délais d'expiration, utilisez la simultanéité réservée pour votre fonction.

  • Si votre pile reste à l'état IN PROGRESS (En cours) jusqu'à l'expiration de la ressource personnalisée, utilisez cURL pour effectuer une requête HTTP directe. Lorsque vous présentez une requête directe, vous empêchez potentiellement le délai d'expiration.
    Example de commande curl :

    curl -H 'Content-Type: ''' -X PUT -d '{    "Status": "SUCCESS",    "PhysicalResourceId": "test-CloudWatchtrigger-1URTEVUHSKSKDFF",
        "StackId": "arn:aws:cloudformation:us-east-1:111122223333:stack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2
      ",
        "RequestId": "e2fc8f5c-0391-4a65-a645-7c695646739",
        "LogicalResourceId": "CloudWatchtrigger"
      }' 'https://cloudformation-custom-resource-response-useast1.s3.us-east-1.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A111122223333%3Astack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2%7CMyCustomResource%7Ce2fc8f5c-0391-4a65-a645-7c695646739?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20170313T0212304Z&X-Amz-SignedHeaders=host&X-Amz-Expires=7200&X-Amz-Credential=QWERTYUIOLASDFGBHNZCV%2F20190415%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=dgvg36bh23mk44nj454bjb54689bg43r8v011uerehiubrjrug5689ghg94hb
      '

    Remarque : Pour effectuer la requête, vous devez inclure les détails de l'objet de requête. Vous trouverez le RequestID et l'URL présignée Amazon S3 dans vos journaux CloudWatch. 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

Exécution d'une automatisation simple (console)

Configuration d’Automation

Référence du dossier d’exploitation de Systems Manager Automation

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

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 mois