Wie behebe ich den CloudFormation-Fehler „the resource already exists in the stack“?

Lesedauer: 3 Minute
0

Ich möchte lernen, wie der CloudFormation-Fehler „the resource already exists in the stack“ behoben werden kann, indem der Ressourcenname geändert oder ein eindeutiger Name generiert wird.

Kurzbeschreibung

Wenn Sie eine Ressource mit demselben Namen und demselben Wert wie eine andere Ressource erstellen, kann AWS CloudFormation nicht zwischen ihnen unterscheiden. Sie erhalten dann die Fehlermeldung: „Resource already exists in stack.“ Jede Ressource hat eine eindeutige physische ID. Sie können die physische ID für die meisten Ressourcen, die in CloudFormation definiert sind, nicht wiederverwenden.

Um dieses Problem zu beheben, ändern Sie den Namen der ausgefallenen Ressource in einen eindeutigen Namen. Sie können sich auch dafür entscheiden, den Namen für diese Ressource nicht zu definieren. Wenn Sie keinen Namen festlegen, generiert CloudFormation einen eindeutigen Namen, wenn Sie die Ressource erstellen. Dieser eindeutige Name erzeugt keinen Konflikt mit Ihren vorhandenen Ressourcen.

Behebung

Hinweis: Sie können die folgende Lösung für verwandte Fehler mit Ressourcen verwenden, die in einem anderen Stack vorhanden sind oder die Sie mit anderen AWS-Ressourcen erstellt haben. Beispielsweise erhalten Sie diesen Fehler möglicherweise bei Amazon Simple Queue Service (Amazon SQS)-Warteschlangen, deren ID bereits vorhanden ist.

Gehen Sie wie folgt vor, um den Namen der ausgefallenen Ressource zu ändern oder einen eindeutigen Namen zu generieren:

  1. Prüfen Sie in der CloudFormation-Vorlage, die Ihre fehlerhafte Ressource enthält, ob andere explizit deklarierte Ressourcen denselben Namen wie Ihre fehlerhafte Ressource haben.

    Im folgenden Beispiel schlägt der Stack fehl, weil jede ManagedPolicy-Ressource von AWS Identity and Access Management (IAM) (ManagedPolicyName) denselben Namen hat (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:
    ........
    ........
  2. Aktualisieren Sie den Namen aller Ressourcen, die einen doppelten Namen haben. Ändern Sie beispielsweise das erste Vorkommen von FinalS3WritePolicy in FinalS3DeletePolicy. Oder entfernen Sie den Namen.

    In den folgenden Beispielen ist Stack A erfolgreich, da jede ManagedPolicy-Ressource von IAM die eindeutigen benutzerdefinierten Namen FinalS3DeletePolicy und FinalS3WritePolicy hat. Stack B ist erfolgreich, da für keine der ManagedPolicyName-Eigenschaften Namenswerte festgelegt wurden. Wenn die Ressource erstellt wird, generiert CloudFormation automatisch einen eindeutigen Namen für jede IAM ManagedPolicy-Ressource in Stack B.

    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:  
    ........  
    ........

    Stack B:

    S3DeletePolicy:
        Type: AWS::IAM::ManagedPolicy
        Properties:
          PolicyDocument:
    ........
    ........
    S3WritePolicy:
        Type: AWS::IAM::ManagedPolicy
        Properties:
          PolicyDocument:
    ........
    ........
AWS OFFICIAL
AWS OFFICIALAktualisiert vor 6 Monaten