Comment résoudre l'erreur AWS CloudFormation indiquant qu'il est « impossible de mettre à jour une pile lorsqu'une ressource dotée d'un nom personnalisé doit être remplacée » ?

Date de la dernière mise à jour : 31/10/2019

Lorsque j'essaie de mettre à jour une pile AWS CloudFormation, je reçoit un message d'erreur similaire au suivant : « CloudFormation ne peut pas mettre à jour une pile lorsqu'une ressource au nom personnalisé doit être remplacée. Renommez « MYResourceXXX » et remettez à jour la pile ». Comment résoudre ce problème ?

Brève description

Cette erreur se produit généralement lorsqu'une mise à jour de pile essaie de remplacer les ressources qui ont des propriétés par des noms personnalisés. AWS CloudFormation ne remplace pas une ressource qui a un nom personnalisé à moins que ce nom personnalisé ne soit modifié en un autre nom. Pour empêcher tout problème dans vos piles et éviter de recevoir ce message d'erreur, modifiez le nom de chaque ressource dotée d'un nom personnalisé avant de mettre une pile à jour.

La bonne résolution du problème implique que :

  • vous mettiez à jour une pile existante et ne tentiez pas de créer une pile ;
  • vous modifiiez le nom des ressources existantes avec un nom personnalisé sans en créer de nouvelles.

Solution

1.    Dans un éditeur de code, ouvrez le modèle AWS CloudFormation pour la pile que vous voulez mettre à jour.

2.    Changez les noms ou valeurs de toutes les propriétés de ressources qui indiquent des noms personnalisés.

Remarque : Dans l'exemple suivant, la propriété DBInstanceIdentifier de la ressource MyRDS est définie avec le nom personnalisé PRODdb. La pile AWS CloudFormation ne pourra être mise à jour qu'une fois PRODdb remplacé par un autre nom, par exemple PRODdb1. Ou, vous pouvez omettre la propriété DBInstanceIdentifier de votre modèle. Dans ce cas, AWS CloudFormation génèrera un identifiant physique unique pour l'instance DB.

"MyRDS": {
    "Type": "AWS::RDS::DBInstance",
    "Properties": {
        "DBInstanceClass": "db.m3.medium",
        "Engine": "MySQL",
        "DBInstanceIdentifier": "PRODdb",
        "AllocatedStorage": "10",
        "AutoMinorVersionUpgrade": "true",
        "BackupRetentionPeriod": "0",
    …
    …
    }
}

Important : Lorsque vous renommez une ressource dotée d'un nom personnalisé, AWS CloudFormation remplace cette dernière. Pour plus d'informations, consultez Types de noms . Le remplacement de certaines ressources peut entraîner une perte de données sans sauvegarde appropriée. Pour plus d'informations, consultez la rubrique Remplacement.

3.    Sauvegardez les modifications apportées à votre modèle AWS CloudFormation, puis utilisez le modèle pour mettre à jour votre pile.