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

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

Je reçois l'erreur suivante dans la console AWS CloudFormation: « Ce modèle ne contient aucune ressource à importer. En savoir plus » Comment puis-je résoudre cette erreur ?

Courte description

Vous recevez cette erreur lorsque vous utilisez la console AWS CloudFormation pour importer des ressources créées en dehors d'AWS CloudFormation dans une pile existante.

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

  • Ressources conditionnelles. Vous disposez d'un modèle AWS CloudFormation qui exclut les ressources conditionnelles ou les ressources qui ne remplissent pas certaines conditions. Vous ajustez les ressources pour que les conditions soient réunies. Ensuite, vous mettez à jour votre modèle pour inclure les ressources maintenant que les conditions sont réunies. Cependant, la console AWS CloudFormation, qui utilise l'API GetTemplateSummary pour rassembler les ressources importées et leurs identifiants, ne reconnaît pas si les conditions sont réunies dans votre modèle mis à jour.
  • Modèles AWS Serverless Application Model (AWS SAM). Les modèles AWS SAM ne prennent pas en charge la possibilité d'importer des ressources qui utilisent la transformation AWS::Serverless (« Transformation : AWS::Serverless-2016-10-31 »).
  • Fn::Transform. La console AWS CloudFormation ne prend pas en charge l'utilisation de la fonction intrinsèque Fn::Transform pour les mises à jour de pile qui utilisent un modèle pour importer des ressources.

Pour résoudre cette erreur, vous pouvez utiliser l'interface de ligne de commande AWS (AWS CLI) au lieu de la console AWS CloudFormation. N'utilisez l'AWS CLI que si l'importation n'affecte pas les ressources qui utilisent directement la fonction Fn::Transform ou les ressources AWS::Serverless.

L'AWS CLI n'utilise pas GetTemplateSummary pour récupérer des identificateurs pour les ressources importées. Au lieu de cela, l'AWS CLI exige que vous fournissiez explicitement les ressources importées en utilisant la création de jeu de modifications et l'exécution de jeu de modifications de l'API AWS CloudFormation.

Résolution

Dans le scénario suivant, un cluster Amazon Elastic Container Service (Amazon ECS) est importé dans une pile AWS CloudFormation :

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

Pour résoudre l'erreur dans le scénario précédent, procédez comme suit :

Remarque : Si votre pile ne se trouve pas dans votre région AWS par défaut, vous devrez peut-être ajouter -région à vos commandes ou modifier 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 :

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

2.    Pour créer un jeu de modifications sur votre pile, exécutez la commande 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 : la commande précédente renvoie le nom Amazon Resource Name (ARN) du jeu de modifications et stocke l'ARN dans l'ID de la variable d'environnement. Remplacez testStack par le nom de votre pile et template.yaml par le nom de fichier de votre modèle AWS CloudFormation.

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.    Pour appliquer le jeu de modifications et importer votre ressource dans la pile, exécutez la commande suivante :

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

Remarque : Vous devez utiliser CAPABILITY_AUTO_EXPAND uniquement si votre modèle utilise des transformations.

5.    (Facultatif) Pour vérifier que toutes les propriétés de votre modèle correspondent à votre ressource, utilisez la détection de l'écart sur la ressource.