Come posso risolvere l'errore "Custom Named Resource already exists in stack" in AWS CloudFormation?

3 minuti di lettura
0

Il mio stack AWS CloudFormation non riesce a creare una risorsa e ricevo un messaggio di errore che mi informa che la mia risorsa esiste già nello stack. Come faccio a risolvere questo problema?

Breve descrizione

Quando crei una risorsa con nome personalizzato con lo stesso nome e impostata sullo stesso valore di un'altra risorsa, CloudFormation non è in grado di distinguerle. Viene quindi visualizzato il messaggio di errore "La risorsa con nome personalizzato esiste già nello stack." Ogni risorsa con nome personalizzato ha un ID fisico univoco. Non puoi riutilizzare l'ID fisico per la maggior parte delle risorse definite in CloudFormation.

È possibile risolvere questo errore cambiando il nome della risorsa con un nome univoco. In alternativa, puoi scegliere di non definire il nome personalizzato per quella risorsa. Se non imposti un nome personalizzato, CloudFormation genera un nome univoco quando la risorsa viene creata. Questo nome univoco non entrerà in conflitto con le tue risorse esistenti.

Risoluzione

  1. 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 personalizzato (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:
........
........
  1. Aggiorna il nome di qualsiasi risorsa con un nome duplicato. Ad esempio, modifica la prima istanza di FinalS3WritePolicy nell'esempio precedente in FinalS3DeletePolicy. Oppure rimuovi il nome personalizzato.

Negli esempi seguenti, Stack A ha successo perché ogni risorsa IAM ManagedPolicy ha un nome personalizzato univoco (FinalS3DeletePolicy e FinalS3WritePolicy). Lo stack B ha esito positivo perché non sono impostati valori di nome personalizzati 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:
........
........

Nota: puoi utilizzare la risoluzione in questo articolo per errori correlati che coinvolgono risorse esistenti in uno stack diverso o risorse create all'esterno di CloudFormation.


AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa