Passer au contenu

Comment résoudre l’erreur « Resource already exists in the stack » pour ma pile CloudFormation ?

Lecture de 3 minute(s)
0

Je souhaite résoudre l'erreur « Resource already exists in the stack » pour ma pile dans AWS CloudFormation.

Brève description

Chaque ressource possède un ID physique unique, et vous ne pouvez pas réutiliser cet ID pour la plupart des ressources définies dans CloudFormation.

Si vous créez une pile et que les ressources ont le même nom et la même valeur qu'une autre ressource, CloudFormation ne peut pas différencier les ressources. Vous recevez alors le message d'erreur « Resource already exists in stack ». Cette erreur peut également s'afficher si des ressources, (que CloudFormation ne définit ni ne gère) ayant le même ID physique existent dans le compte AWS ou la région AWS.

Pour résoudre ce problème, remplacez le nom de la ressource défaillante par un nom unique, ou ne définissez pas 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 services 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à.

Vérifier le nom de vos ressources

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) porte le même nom FinalS3WritePolicy :

S3DeletePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName:
        Fn::Join:
        - _
        - - FinalS3WritePolicy
      - Ref: EnvType
      PolicyDocument:
........
........
S3WritePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName:
        Fn::Join:
        - _
        - - FinalS3WritePolicy
          - Ref: EnvType
      PolicyDocument:
........
........

Mettre à jour le nom de la ressource dupliquée

Mettez à jour le nom d’une 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.

Exemple pour la 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:  
........  
........

Exemple pour la pile B :

S3DeletePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
........
........
S3WritePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
........
........
AWS OFFICIELA mis à jour il y a 4 mois