Comment résoudre l'erreur « No Export named XYZ found » (Exportation XYZ introuvable) dans CloudFormation ?

Lecture de 5 minute(s)
0

Je reçois l'erreur « No Export named XYZ found » (Exportation XYZ introuvable) dans AWS CloudFormation lorsque j'utilise la fonction Fn::ImportValue dans ma pile.

Brève description

Dans CloudFormation, lorsque vous créez une référence de pile utilisant des valeurs d'importation ou d'exportation, vous devez procéder comme suit :

  • Dans la pile où vous voulez exporter une valeur, utilisez l'indicateur Export: dans la section Outputs (Sorties) de votre modèle CloudFormation.
  • Dans la pile où vous voulez référencer la valeur exportée, utilisez la fonction Fn::ImportValue.

Vous pouvez recevoir l'erreur « No Export named XYX found » (Exportation XYX introuvable) dans les cas suivants :

  • Vous utilisez la fonction Fn::ImportValue dans des piles imbriquées.
  • La valeur exportée ne se trouve pas dans la même région AWS (ou dans le même compte AWS) où vous importez la valeur.
  • La valeur exportée n'est pas créée ou publiée avant d'être importée par la pile.
  • Vous avez utilisé un nom d'exportation incorrect dans la pile d'importation.

Choisissez l'une des solutions décrites ci-après, en fonction du problème que vous rencontrez.

Solution

Remarque : si vous recevez des erreurs lors de l'exécution des commandes de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'AWS CLI.

Vous utilisez la fonction Fn::ImportValue dans des piles imbriquées

Par défaut, CloudFormation crée des piles enfants en parallèle des piles imbriquées. La création de la pile peut échouer si des piles enfants sont créées en parallèle les unes avec les autres et qu'une pile enfant importe la sortie d'une autre. La valeur d'exportation risque de ne pas être disponible à temps pour être importée par l'autre pile enfant.

Afin de résoudre ce problème, utilisez l'attribut DependsOn pour créer une dépendance explicite pour la pile utilisant la fonction Fn::ImportValue. La pile enfant qui utilise la fonction Fn:ImportValue est alors créée uniquement après la pile enfant exportant la valeur.

Dans l'exemple de pile imbriquée suivant, ChildStack01 exporte une valeur dans la section Outputs (Sorties) et ChildStack02 utilise la fonction Fn::ImportValue pour importer la valeur depuis ChildStack01. Vous pouvez utiliser l'attribut DependsOn pour ChildStack02 comme dans l'exemple de modèle YAML suivant :

AWSTemplateFormatVersion: 2010-09-09
Resources:
 ChildStack01:
   Type: 'AWS::CloudFormation::Stack'
   Properties:
     TemplateURL: 'https://s3.amazonaws.com/cloudformation-templates-us-east-1/VPC.template'
     TimeoutInMinutes: '60'
 ChildStack02:
   Type: 'AWS::CloudFormation::Stack'
   DependsOn: ChildStack01
   Properties:
     TemplateURL: 'https://s3.amazonaws.com/cloudformation-templates-us-east-1/Subnet.template'
     TimeoutInMinutes: '60'

Conseil : pour les références interpiles, utilisez la fonction Fn::ImportValue afin d'importer une valeur à partir d'un autre modèle. Pour les piles imbriquées, utilisez les fonctions Fn::Ref et Fn::GetAtt pour référencer la valeur dans votre modèle actuel.

La valeur exportée ne se trouve pas dans la même région AWS (ou dans le même compte AWS) où vous importez la valeur

Les références interpiles s'appliquent uniquement au sein d'un même compte et d'une même région. Les autres piles se trouvant dans le même compte et dans la même région peuvent uniquement importer les valeurs exportées.

Afin de résoudre ce problème, suivez les étapes de la section Vérifier la configuration des piles d'exportation et d'importation avant de créer la pile avec la fonction Fn::ImportValue.

La valeur exportée n'est pas créée ou publiée avant d'être importée par la pile

Pour les piles non imbriquées, vous devez déployer la pile qui exporte une valeur. La pile doit se trouver à l'état Create_Complete (Création_terminée) ou Update_Complete (Mise à jour_terminée) avant de créer la pile en cours d'importation.

Afin de résoudre ce problème, suivez les étapes de la section Vérifier la configuration des piles d'exportation et d'importation avant de créer la pile avec la fonction Fn::ImportValue.

Vous avez utilisé un nom d'exportation incorrect dans la pile d'importation

  1. Vérifiez que le nom de l'exportation est répertorié dans votre compte.
  2. Lorsque vous importez un nom d'exportation d'une pile vers une autre, veillez à utiliser le même nom d'exportation dans les deux piles.
  3. Suivez les étapes de la section Vérifier la configuration des piles d'exportation et d'importation avant de créer la pile avec la fonction Fn::ImportValue.

Vérification de la configuration des piles d'exportation et d'importation

Vous pouvez utiliser la console CloudFormation ou l'AWS CLI afin de vérifier que la valeur d'exportation existe dans la même région et le même compte.

Depuis la console CloudFormation :

  1. Ouvrez la console CloudFormation.
  2. Dans le panneau de navigation, sélectionnez Exports (Exportations).
  3. Vérifiez que la valeur d'exportation est répertoriée dans la console.

Depuis l'AWS CLI :

1.    Pour répertorier les exportations disponibles, exécutez la commande suivante :

aws cloudformation list-exports --region us-east-1

Remarque : remplacez us-east-1 par votre région.

2.    Dans la sortie, vérifiez que la propriété Name (Nom) est identique pour la pile d'importation et d'exportation. La sortie est similaire à ce qui suit :

aws cloudformation list-exports --region us-east-1 --output yaml
Exports:
- ExportingStackId: arn:aws:cloudformation:us-east-1:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800
  Name: private-vpc-subnet-a
  Value: subnet-01a234bcdefghij56

Important : lorsque vous utilisez des valeurs d'importation et d'exportation dans vos piles, plusieurs éléments sont à prendre en compte. Une fois qu'une pile importe une valeur de sortie, vous ne pouvez pas supprimer la pile qui exporte cette valeur de sortie ou modifier la valeur de sortie exportée. Vous devez effacer toutes les importations avant de pouvoir supprimer la pile d'exportation ou modifier la valeur de sortie. Le nom de l'exportation doit être unique au sein de la région. Afin de contourner ce problème, vous pouvez utiliser les paramètres dans AWS Systems Manager Parameter Store pour partager les valeurs entre les piles CloudFormation.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans