Comment éliminer l'erreur « Custom Named Resource already exists in stack » (La ressource nommée personnalisée existe déjà dans la pile) dans AWS CloudFormation ?

Dernière mise à jour : 16/08/2022

Ma pile AWS CloudFormation ne parvient pas à créer une ressource, et je reçois un message d'erreur qui indique que la ressource existe déjà dans la pile. Comment puis-je résoudre cette erreur ?

Brève description

Lorsque vous créez une ressource nommée personnalisée portant le même nom et définie à la même valeur qu'une autre ressource, CloudFormation ne peut pas les différencier. Vous recevez alors le message d'erreur « Custom Named Resource already exists in stack. » (La ressource nommée personnalisée existe déjà dans la pile). Chaque ressource nommée personnalisée dispose d'un ID physique unique. Vous ne pouvez pas réutiliser l'ID physique pour la plupart des ressources définies dans CloudFormation.

Vous pouvez éliminer cette erreur en remplaçant le nom d'une ressource défaillante par un nom unique. Vous pouvez également choisir de ne pas définir de nom personnalisé pour cette ressource. Si vous ne définissez pas de nom personnalisé, CloudFormation génère un nom unique lors de la création de la ressource. Ce nom unique ne sera pas en conflit avec vos ressources existantes.

Résolution

1.    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 AWS Identity and Access Management (IAM) (ManagedPolicyName) porte le même nom personnalisé (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:
........
........

2.    Mettez à jour le nom d'une ressource portant un nom en double. Par exemple, remplacez la première instance de FinalS3WritePolicy dans l'exemple précédent par FinalS3DeletePolicy. Vous pouvez également supprimer le nom personnalisé.

Dans les exemples suivants, la pile A aboutit, car chaque ressource ManagedPolicy IAM porte un nom personnalisé unique (FinalS3DeletePolicy et FinalS3WritePolicy). La pile B aboutit, car aucune valeur de nom personnalisé n'est définie pour les deux propriétés ManagedPolicyName. Lors de la création de la ressource, CloudFormation génère automatiquement un nom unique pour chaque ressource ManagedPolicy IAM dans 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:
........
........

Remarque : vous pouvez utiliser la solution donnée dans cet article pour les erreurs connexes qui impliquent des ressources qui existent dans une pile différente ou des ressources créées en dehors de CloudFormation.


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?