Comment résoudre l'erreur « Internal Failure » (Échec interne) lorsque j'essaie de créer ou de mettre à jour une pile dans CloudFormation ?

Dernière mise à jour : 05-04-2021

Je souhaite résoudre l'erreur « Internal Failure » (Échec interne) rencontrée dans AWS CloudFormation.

Brève description

Si vous créez ou mettez à jour votre pile CloudFormation, vous pouvez rencontrer l'erreur « Internal Failure » (Échec interne) en cas d'échec d'une opération sur une ressource. Vous pouvez également recevoir cette erreur en cas d'échec de déploiement de votre pile.

Une opération sur une ressource peut échouer dans les cas suivants :

  • Vos ressources ou propriétés sont définies sur des valeurs incorrectes. Pour résoudre ce problème, suivez les étapes de la section Déployer une pile de test pour rechercher les valeurs incorrectes de vos ressources ou propriétés.
  • Un flux de travail interne a échoué. Pour résoudre ce problème à l'aide d'AWS CloudTrail, suivez les étapes de la section Rechercher les opérations d'API ayant échoué dans vos journaux d'événements CloudTrail.

Enfin, le déploiement de votre pile peut échouer si vous transmettez des valeurs incorrectes à la section Outputs (Sorties) de votre modèle CloudFormation. Pour résoudre cette erreur, suivez les étapes de la section Vérifier les valeurs de la section Outputs (Sorties) de votre modèle CloudFormation.

Remarque : les étapes suivantes s'appliquent uniquement aux erreurs « Internal Failure » (Échec interne) que vous recevez lorsque vous essayez de créer ou de mettre à jour une pile dans CloudFormation.

Résolution

Déployer une pile de test pour rechercher les valeurs incorrectes de vos ressources ou propriétés

Pour rechercher les valeurs incorrectes de vos propriétés ou attributs de ressource, déployez une pile de test à l'aide d'un modèle CloudFormation incluant uniquement la ressource ayant échoué.

Si votre pile de test se déploie correctement, suivez les étapes de la section Rechercher les opérations d'API ayant échoué dans vos journaux d'événements CloudTrail.

Si le déploiement de votre pile de test échoue, continuez à supprimer les propriétés et attributs non requis jusqu'à ce que vous trouviez les valeurs incorrectes.

Dans l'exemple de scénario suivant, vous recevez l'erreur « Internal Failure » (Échec interne) lorsque CloudFormation tente de créer une ressource AWS::Config::ConformancePack avec AWS Config. Une erreur est renvoyée, car la propriété DeliveryS3Bucket utilise une syntaxe incorrecte. La propriété DeliveryS3Bucket accepte uniquement un nom de compartiment comme valeur (par exemple, nomcompartiment). Un chemin d'accès qui inclut le nom du compartiment n'est pas une valeur acceptable (par exemple, s3://nomcompartiment).

AWSTemplateFormatVersion: 2010-09-09
Resources:
  CloudFormationCanaryPack:
    Type: AWS::Config::ConformancePack
    Properties:
      ConformancePackName: ConformancePackName
      DeliveryS3Bucket: s3://bucketname            # Incorrect value for DeliveryS3Bucket
      TemplateS3Uri: s3://bucketname/prefix

Rechercher les opérations d'API ayant échoué dans vos journaux d'événements CloudTrail

1.    Ouvrez la console CloudTrail.

2.    Dans le volet de navigation, sélectionnez Historique des événements.

3.    Pour Time range (Période), spécifiez un intervalle permettant d'isoler l'appel d'API ayant échoué, puis sélectionnez Apply (Appliquer).

Astuce : pour l'heure From (de début), spécifiez l'heure à laquelle la ressource est arrivée à l'état CREATE_IN_PROGRESS (création en cours) ou UPDATE_IN_PROGRESS (mis à jour en cours) dans votre pile CloudFormation. Pour l'heure de To (de fin), spécifiez l'heure à laquelle l'appel d'API a échoué.

4.    Pour rechercher au-delà de l'affichage par défaut des événements dans Event history (historique d'événements), utilisez des filtres attributaires.

Remarque : par défaut, Event history utilise un filtre en Read-only (en lecture seule) défini sur false. Le résultat du filtre en Read-only affiche uniquement les événements d'écriture pour l'activité API et exclut les événements en lecture seule de la liste des événements affichés.

Vous pouvez utiliser EventName pour filtrer par nom de l'événement renvoyé. Si vous connaissez l'action API utilisée pour créer ou mettre à jour une ressource, vous pouvez utiliser un filtre EventName pour des appels d'API spécifiques uniquement. Par exemple, la pile CloudFormation utilise l'action de l'API AWS Config PutConformancePack lorsqu'elle crée une ressource AWS::Config::ConformancePack. Cela signifie que vous pouvez filtrer uniquement les événements correspondant à l'API PutConformancePack. Vous pouvez utiliser EventSource pour filtrer par le service AWS qui a fait la demande d'API. Ainsi, vous pouvez faire défiler une liste de sources d'événements et choisir la ressource appropriée utilisée dans votre modèle CloudFormation.

5.    Pour identifier la cause racine de l'échec, consultez le message d'erreur correspondant à l'événement renvoyé.

Remarque : certains échecs d'opérations d'API nécessitent que vous mettiez à jour votre modèle CloudFormation d'origine, puis que vous exécutiez un test de déploiement pour confirmer que l'erreur est résolue.

Vérifier les valeurs de la section Outputs (Sorties) de votre modèle CloudFormation

Dans votre modèle CloudFormation, vérifiez que les valeurs de la section Outputs (Sorties) ne contiennent pas d'erreurs de syntaxe. Par exemple, supprimez les espaces de fin.

Si vous récupérez des attributs de ressource avec des références dynamiques, vous devez confirmer que les attributs sont disponibles pendant le déploiement de la pile. Pour simuler cela en dehors de CloudFormation, procédez comme suit :

1.    Effectuez un appel d'API Create* ou Update* vers le type de ressource avec l'attribut ayant échoué (à créer ou modifier).

2.    Effectuez un appel d'API Describe* pour récupérer les attributs actuels de la ressource pendant le processus de création ou de mise à jour de la pile.

L'exemple de scénario suivant illustre une erreur interne renvoyée par une pile lorsque l'attribut ReplicationInstancePrivateIpAddresses de la ressource AWS::DMS::ReplicationInstance est transmis à Outputs (Sorties).

Dans l'exemple suivant, l'attribut IP privé de l'instance est disponible uniquement une fois que la ressource ReplicationInstance est passée à l'état available (disponible). Si la ressource ReplicationInstance n'est pas à l'état available (disponible) au moment où la pile exécute Outputs (Sorties), CloudFormation ne peut pas récupérer l'attribut IP privé. Par conséquent, le déploiement échoue.

AWSTemplateFormatVersion: 2010-09-09
Resources:
  BasicReplicationInstance:
    Type: AWS::DMS::ReplicationInstance
    Properties:
      ReplicationInstanceClass: dms.t2.small
Outputs:
  DmsInstanceIP:
    Value: !GetAtt BasicReplicationInstance.ReplicationInstancePrivateIpAddresses

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


Besoin d'aide pour une question technique ou de facturation ?