Comment résoudre l'erreur « Exportation XYZ introuvable » dans AWS CloudFormation ?

Dernière mise à jour : 12/06/2020

Je reçois l'erreur « Exportation XYZ introuvable » dans AWS CloudFormation lorsque j'utilise Fn::ImportValue dans ma pile. Comment puis-je résoudre cette erreur ?

Brève description

Lorsque vous créez une référence de pile dans AWS CloudFormation à partir de valeurs d'importation ou d'exportation, vous devez procéder comme suit :

  • Dans la pile depuis laquelle vous souhaitez exporter une valeur, utilisez l'indicateur Export: dans la section Outputs de votre modèle AWS CloudFormation.
  • Dans la pile d'importation, utilisez Fn::ImportValue.

Ce message d'erreur peut s'afficher dans les situations suivantes :

  • Vous utilisez Fn::ImportValue dans des piles imbriquées.
  • La valeur exportée ne se trouve pas au sein de la même région AWS ou du même compte que la région et le compte d'importation.
  • 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.

Résolution

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

Dans le cadre de piles imbriquées, AWS CloudFormation crée par défaut des piles enfants en parallèle. Lorsqu'une pile enfant importe une sortie de l'autre pile enfant, la création de pile peut échouer. Si AWS CloudFormation crée les piles enfants en parallèle, la valeur à exporter risque de ne pas être disponible à temps pour être importée par l'autre pile enfant.

Pour résoudre l'erreur, utilisez l'attribut DependsOn afin de créer une dépendance explicite de la pile utilisant Fn::ImportValue par rapport à la pile contenant la sortie exportée.

Voici un exemple de pile imbriquée. ChildStack01 exporte une valeur dans la section Outputs et ChildStack02 utilise Fn::ImportValue pour importer la valeur depuis ChildStack01. Vous pouvez utiliser l'attribut DependsOn pour ChildStack02 en vous basant sur l'exemple 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 entre piles, utilisez Fn::ImportValue afin d'importer une valeur à partir d'un autre modèle. Pour les piles imbriquées, utilisez Fn::Ref et Fn::GetAtt pour référencer la valeur dans votre modèle actuel.

La valeur exportée ne se trouve pas au sein de la même région AWS ou du même compte que la région et le compte d'importation

Les références entre piles s'appliquent uniquement au sein d'un même compte et d'une même région AWS. Les autres piles qui se trouvent dans les mêmes compte et région AWS peuvent seulement importer les valeurs exportées.

Pour 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 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 d'exportation. La pile doit avoir l'état Create_Complete ou Update_Complete avant de créer la pile d'importation.

Pour 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 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 AWS.

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 Fn::ImportValue.

Vérifier la configuration des piles d'exportation et d'importation

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

Depuis la console AWS CloudFormation :

1.    Ouvrez la console AWS CloudFormation.

2.    Dans le volet de navigation, sélectionnez 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 est exactement la même pour la pile d'importation et d'exportation. Voici un exemple de sortie :

{
    "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, tenez compte des éléments suivants :

  • Une fois qu'une pile importe une valeur de sortie, vous ne pouvez ni supprimer la pile d'exportation correspondante, ni 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.

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

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


Vous avez besoin d'aide ?