Comment résoudre l'erreur « L'exportation EXPORT_NAME ne peut pas être mise à jour, car elle est utilisée par STACK_NAME » dans AWS CloudFormation ?

Dernière mise à jour : 28/09/2020

J'ai essayé de mettre à jour ou de supprimer ma pile AWS CloudFormation, mais j'ai reçu une erreur similaire à celle-ci : « L'exportation EXPORT_NAME ne peut pas être mise à jour, car elle est utilisée par STACK_NAME ».

Brève description

Vous recevez cette erreur, car une ou plusieurs piles importent une valeur de sortie exportée à partir de la pile que vous souhaitez mettre à jour ou supprimer. Vous ne pouvez pas mettre à jour ni supprimer votre pile si d'autres piles importent des valeurs à partir de cette dernière.

Pour résoudre ce problème, procédez comme suit :

  1. Recherchez les piles qui importent la valeur de sortie exportée.
  2. Pour les piles qui importent la valeur exportée, mettez à jour le modèle de pile pour remplacer les instructions importation par la valeur de sortie réelle.
  3. Mettez à jour la pile d'importation à l'aide du modèle modifié.

Solution

Remarque : Si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), veillez à utiliser la version la plus récente de l'interface de ligne de commande AWS CLI.

Recherchez les piles qui importent la valeur de sortie exportée

Pour identifier les piles qui font référence à la valeur de sortie exportée, vous pouvez utiliser l’interface de ligne de commande AWS CLI, les outils AWS pour PowerShell, ou la console AWS CloudFormation.

AWS CLI :

1.    Pour répertorier toutes les valeurs de sortie exportées, exécutez la commande suivante :

aws cloudformation list-exports

2.    Pour répertorier toutes les piles qui importent une valeur de sortie exportée, exécutez la commande suivante :

aws cloudformation list-imports --export-name EXPORT_NAME

Remarque : remplacez EXPORT_NAME par le nom de votre valeur de sortie exportée.

Outils AWS pour PowerShell :

1.    Pour répertorier toutes les valeurs de sortie exportées, exécutez la commande suivante :

Get-CFNExport

2.    Pour répertorier toutes les piles qui importent une valeur de sortie exportée, exécutez la commande suivante :

Get-CFNImportList -ExportName EXPORT_NAME

Remarque : remplacez EXPORT_NAME par le nom de votre valeur de sortie exportée.

Console AWS CloudFormation :

1.    Ouvrez la console AWS CloudFormation.

2.    Depuis le menu CloudFormation, choisissez Exports (Exportations).

3.    Pour Export Name (Nom de l'exportation), choisissez le nom de la valeur de sortie exportée à partir de votre pile.

4.    Pour Importations, choisissez les piles qui importent la valeur de sortie exportée à partir de votre pile.

Mettez à jour le modèle de pile pour remplacer les instructions Import (importation) par la valeur de sortie réelle

1.    Dans votre modèle AWS CloudFormation, remplacez les fonctions intrinsèques par les valeurs importées pour chaque pile qui fait référence à la valeur de sortie exportée de votre pile.

Par exemple, les fonctions intrinsèques Fn::ImportValue et !ImportValue sont remplacées par la valeur importée arn:aws:s3:::sample dans les modèles JSON et YAML suivants.

Modèle JSON avec fonction intrinsèque :

{
    "Parameters": {
       "parameterName": {
          "Type": "String"
       }
    },
    "Resources": {
       "testParameter": {
          "Type": "AWS::SSM::Parameter",
          "Properties": {
             "Description": "Test SSM Parameter",
             "Name": { "Ref": "parameterName" },
             "Type": "String",
             "Value": { "Fn::ImportValue": "sample-s3-bucket:Bucket-arn" }
          }
       }
    }
 }

Modèle JSON avec valeur importée :

{
    "Parameters": {
       "parameterName": {
          "Type": "String"
       }
    },
    "Resources": {
       "testParameter": {
          "Type": "AWS::SSM::Parameter",
          "Properties": {
             "Description": "Test SSM Parameter",
             "Name": { "Ref": "parameterName" },
             "Type": "String",
             "Value": "arn:aws:s3:::sample"
          }
       }
    }
 }

Modèle YAML avec fonction intrinsèque :

Parameters:
  parameterName:
    Type: String
Resources:
  testParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Description: Test SSM Parameter
      Name: !Ref parameterName
      Type: String
      Value: !ImportValue sample-s3-bucket:Bucket-arn

Modèle YAML avec la valeur importée :

Parameters:
  parameterName:
    Type: String
Resources:
  testParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Description: Test SSM Parameter
      Name: !Ref parameterName
      Type: String
      Value: arn:aws:s3:::sample

2.    Mettez à jour ou supprimez votre pile.

Maintenant que les importations sont dissociées, vous pouvez mettre à jour ou supprimer la pile qui a exporté les valeurs.