Je souhaite apprendre à résoudre l’erreur CloudFormation « la ressource existe déjà dans la pile » en modifiant le nom de la ressource ou en générant un nom unique.
Brève description
Lorsque vous créez une ressource portant le même nom et dont la valeur est identique à celle d’une autre ressource, AWS CloudFormation ne peut pas les différencier. Vous recevez alors le message d'erreur suivant : « Resource already exists in stack. » Chaque ressource possède un identifiant physique unique. Vous ne pouvez pas réutiliser l’identifiant physique pour la plupart des ressources définies dans CloudFormation.
Pour résoudre ce problème, remplacez le nom de la ressource défaillante par un nom unique. Vous pouvez également choisir de ne pas définir le nom de cette ressource. Si vous ne définissez pas de nom, CloudFormation génère un nom unique lorsque vous créez la ressource. Ce nom unique n’entre pas en conflit avec vos ressources existantes.
Résolution
Remarque : vous pouvez utiliser la résolution suivante pour les erreurs associées à des ressources qui existent dans une pile différente ou que vous avez créées avec d’autres ressources AWS. Par exemple, vous pouvez recevoir cette erreur avec des files d’attente Amazon Simple Queue Service (Amazon SQS) dont l’identifiant existe déjà.
Pour modifier le nom de la ressource défaillante ou générer un nom unique, procédez comme suit :
-
Dans le modèle CloudFormation qui contient la ressource défaillante, vérifiez si d’autres ressources explicitement déclarées portent le même nom que votre ressource défaillante.
Dans l’exemple suivant, la pile échoue car chaque ressource ManagedPolicy de Gestion des identités et des accès AWS (AWS IAM) (ManagedPolicyName) porte le même nom (Finals3WritePolicy) :
S3DeletePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName:
Fn::Join:
- _
- - FinalS3DeletePolicy
- Ref: EnvType
PolicyDocument:
........
........
S3WritePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName:
Fn::Join:
- _
- - FinalS3WritePolicy
- Ref: EnvType
PolicyDocument:
........
........
-
Mettez à jour le nom de toute ressource dont le nom est dupliqué. Par exemple, remplacez la première occurrence de Finals3WritePolicy par Finals3DeletePolicy. Ou supprimez le nom.
Dans les exemples suivants, la pile A réussit car chaque ressource IAM ManagedPolicy porte les noms uniques Finals3DeletePolicy et Finals3WritePolicy. La pile B réussit car aucune valeur de nom n’est définie pour l’une ou l’autre des propriétés ManagedPolicyName. Lorsque la ressource est créée, CloudFormation génère automatiquement un nom unique pour chaque ressource IAM ManagedPolicy de la pile B.
Pile A :
S3DeletePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName:
Fn::Join:
- _
- - FinalS3DeletePolicy
- Ref: EnvType
PolicyDocument:
........
........
S3WritePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName:
Fn::Join:
- _
- - FinalS3WritePolicy
- Ref: EnvType
PolicyDocument:
........
........
Pile B :
S3DeletePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........
S3WritePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........