Desidero risolvere l'errore "Resource already exists in the stack" del mio stack in AWS CloudFormation.
Breve descrizione
Ogni risorsa ha un ID fisico univoco e non puoi riutilizzare l'ID fisico per la maggior parte delle risorse definite in CloudFormation.
Se crei uno stack e le risorse hanno lo stesso nome e lo stesso valore di un'altra risorsa, CloudFormation non è in grado di distinguere tra le risorse. Quindi ricevi il messaggio di errore "Resource already exists in stack". Inoltre, potresti ricevere questo errore se nell'account AWS o nella Regione AWS esistono risorse che CloudFormation non definisce o gestisce con lo stesso ID fisico.
Per risolvere il problema, modifica il nome della risorsa che ha generato l'errore attribuendole un nome univoco o non definirne il nome. Se non definisci un nome, CloudFormation genera un nome univoco quando crei la risorsa, che non entrerà in conflitto con le risorse esistenti.
Risoluzione
Nota: puoi utilizzare la seguente risoluzione per errori correlati con risorse che esistono in uno stack diverso o che hai creato con altri servizi AWS. Ad esempio, potresti visualizzare questo errore con code di Amazon Simple Queue Service (Amazon SQS) che hanno un identificatore già esistente.
Controlla il nome delle risorse
Nel modello CloudFormation contenente la risorsa che ha generato l'errore, controlla se altre risorse dichiarate esplicitamente hanno il suo stesso nome.
Nell'esempio seguente, lo stack genera un errore perché ogni risorsa AWS Identity and Access Management (AWS IAM) ManagedPolicy ha lo stesso nome 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:
........
........
Aggiorna il nome della risorsa duplicata
Aggiorna il nome di una risorsa che ha un nome duplicato. Ad esempio, modifica la prima occorrenza di Finals3WritePolicy in Finals3DeletePolicy. In alternativa, rimuovi il nome.
Negli esempi seguenti, lo Stack A non genera errori perché ogni risorsa IAM ManagedPolicy ha un nome univoco FinalS3DeletePolicy e FinalS3WritePolicy. Lo Stack B non genera errori perché non sono impostati valori di nome per alcuna proprietà ManagedPolicyName. Quando la risorsa viene creata, CloudFormation genera automaticamente un nome univoco per ogni risorsa ManagedPolicy IAM nello Stack B.
Esempio per lo Stack 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:
........
........
Esempio per lo Stack B:
S3DeletePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........
S3WritePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........