Voglio imparare come risolvere l'errore CloudFormation "la risorsa esiste già nello stack" modificando il nome della risorsa o generando un nome univoco.
Breve descrizione
Quando crei una risorsa con lo stesso nome e impostata sullo stesso valore di un'altra risorsa, AWS CloudFormation non è in grado di distinguerle. Viene quindi visualizzato il messaggio di errore "La risorsa esiste già nello stack." Ogni risorsa ha un ID fisico univoco. Non puoi riutilizzare l'ID fisico per la maggior parte delle risorse definite in CloudFormation.
Per risolvere questo problema, modifica il nome della risorsa non riuscita con un nome univoco. In alternativa, puoi scegliere di non definire il nome di quella risorsa. Se non imposti un nome, CloudFormation genera un nome univoco quando la risorsa viene creata. Questo nome univoco non entrerà in conflitto con le tue 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 altre risorse AWS. Ad esempio, potresti visualizzare questo errore con le code di Amazon Simple Queue Service (Amazon SQS) che hanno un identificatore già esistente.
Per modificare il nome della risorsa non riuscita o generare un nome univoco, completa i passaggi seguenti:
-
Nel modello CloudFormation che contiene la risorsa in errore, controlla se altre risorse dichiarate esplicitamente hanno lo stesso nome della risorsa non riuscita.
Nell'esempio seguente, lo stack fallisce perché ogni risorsa ManagedPolicy (ManagedPolicyName) di AWS Identity and Access Management (IAM) ha lo stesso nome (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:
........
........
-
Aggiorna il nome di qualsiasi risorsa con un nome duplicato. Ad esempio, modifica la prima occorrenza di Finals3WritePolicy in Finals3DeletePolicy. In alternativa, rimuovi il nome.
Negli esempi seguenti, Stack A ha successo perché ogni risorsa IAM ManagedPolicy ha un nome univoco FinalS3DeletePolicy e FinalS3WritePolicy. Lo stack B ha esito positivo perché non sono impostati valori di nome per nessuna delle proprietà ManagedPolicyName. Quando la risorsa viene creata, CloudFormation genera automaticamente un nome univoco per ogni risorsa IAM ManagedPolicy in Stack B.
Pila 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:
........
........
Pila B:
S3DeletePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........
S3WritePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........