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 ?

Date de la dernière mise à jour : 23/05/2019

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 éliminer cette erreur ?

Brève description

Vous recevez cette erreur de AWS CloudFormation lorsque vous disposez d'une ou de plusieurs ressources nommées personnalisées portant le même nom. Chaque ressource dispose d'un nom personnalisé comme identifiant physique unique. Vous ne pouvez pas réutiliser l'ID physique pour la plupart des ressources définies dans AWS CloudFormation.

Vous pouvez éliminer cette erreur en remplaçant le nom d'une ressource répétitive ou 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é, AWS 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 AWS CloudFormation qui contient la ressource défaillante, vérifiez que d'autres ressources explicitement déclarées portent le même nom que la ressource défaillante.

Dans l'exemple suivant, la pile échoue, car chaque ressource AWS ManagedPolicy IAM (Identity and Access Management) (ManagedPolicyName) porte le même nom personnalisé (FinalS3WritePolicy).

# This stack will fail
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 aucun nom personnalisé n'est défini pour les deux propriétés ManagedPolicyName. AWS CloudFormation génère automatiquement un nom unique pour chaque ressource ManagedPolicy IAM dans la pile B lors de la création de la ressource

Pile A :

# This stack will Succeed as unique names are set:
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 :

# This stack will Succeed as no names are set     
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 existantes dans une pile différente ou des ressources créées en dehors d'AWS CloudFormation.


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

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?