Comment résoudre l'erreur « Ce modèle ne contient aucune ressource à importer » dans AWS CloudFormation ?

Dernière mise à jour : 29/03/2022

L'erreur suivante s'affiche dans la console AWS CloudFormation : « Ce modèle ne contient aucune ressource à importer ». En savoir plus. »

Brève description

L'erreur en question se produit lorsque vous utilisez la console AWS CloudFormation pour importer des ressources dans une pile existante qui a été créée en dehors de CloudFormation.

Cette erreur peut se produire lorsque vous utilisez la console AWS CloudFormation dans le cadre de scénarios comportant l'un des éléments suivants :

  • Ressources conditionnelles. La ressource que vous importez comporte une clé conditionnelle associée à une condition dont le résultat est faux.
  • Modèles AWS Serverless Application Model (AWS SAM). La console AWS CloudFormation ne prend pas en charge la section Transforms (Transformations) pour l'importation de ressources. Vous ne pouvez pas importer une ressource avec un modèle utilisant la transformation AWS::Serverless.
  • Fn::Transform. La console AWS CloudFormation ne prend pas en charge l'utilisation de la fonction intrinsèque Fn::Transform pour l'importation de ressources.

Cette erreur peut être résolue en utilisant l'AWS Command Line Interface (AWS CLI) au lieu de la console AWS CloudFormation pour les modèles utilisant :

  • AWS SAM
  • Fn::Transform

L'erreur relative aux ressources conditionnelles peut être résolue en s'assurant que la condition spécifiée sous la clé conditionnelle est évaluée comme étant vraie pour la ressource importée.

L'AWS CLI requiert que vous fournissiez explicitement les ressources importées à l'aide de la commande CloudFormation, create-change-set.

Remarque : si vous constatez des erreurs lors de l'exécution des commandes de l'AWS CLI, assurez-vous que vous utilisez bien la dernière version d'AWS CLI.

Résolution

Dans l'exemple suivant, l'AWS CLI est utilisée pour importer une ressource AWS::ECS::Cluster existante dans une pile CloudFormation :

Resources:
  ...
  ECSCluster2:
    Condition: MyCondition
    Type: AWS::ECS::Cluster
    DeletionPolicy: Retain
    Properties:
      ClusterName: Cluster2

Remarque : avant de passer aux étapes suivantes, assurez-vous que la condition MyCondition est évaluée à vrai.

Pour importer la ressource à l'aide d'AWS CLI, procédez comme suit :

Remarque : si votre pile n'est pas dans votre région AWS par défaut, ajoutez --region à vos commandes ou modifiez la région par défaut en définissant et en exportant la variable d'environnement AWS_DEFAULT_REGION.

1.    Créez un fichier d'importation de ressources appelé import.txt. Par exemple:

[
    {
        "ResourceType": "AWS::ECS::Cluster",
        "LogicalResourceId":
            "ECSCluster2"
        ,
        "ResourceIdentifier": {
            "ClusterName":"Cluster2"
        }
    }
]

2.    Pour créer un ensemble de modifications pour votre pile, exécutez la commande create-change-set suivante :

ID=$(aws cloudformation create-change-set --stack-name testStack --change-set-name testSet --resources-to-import file://import.txt --change-set-type IMPORT --template-body file://template.yaml --capabilities CAPABILITY_AUTO_EXPAND  --query 'Id' --output text)

Remarque : remplacez testStack par le nom de votre pile et template.yaml par le nom de votre fichier modèle CloudFormation. La commande précédente renvoie l'Amazon Resource Name (ARN) de l'ensemble de modifications et le stocke dans l'ID de la variable d'environnement.

Remarque : il faut utiliser CAPABILITY_AUTO_EXPAND uniquement si votre modèle utilise des transformations.

3.    (Facultatif) Pour attendre que le jeu de modifications soit créé avec succès, exécutez la commande suivante :

aws cloudformation wait change-set-create-complete --change-set-name ${ID}

4.    Affichez l'ensemble des modifications à l'aide de la console AWS CloudFormation. Vous pouvez également utiliser la commande describe-change-set suivante :

aws cloudformation describe-change-set --change-set-name ${ID}

5.    Pour appliquer l'ensemble de modifications et importer votre ressource dans la pile, exécutez la commande suivante :

aws cloudformation execute-change-set --change-set-name ${ID}

6.    (Facultatif) Pour vérifier que toutes les propriétés de votre modèle correspondent à votre ressource, appliquez l'outil Drift Detection sur la ressource.