Wie behebe ich den Fehler „Ressource mit benutzerdefiniertem Namen ist bereits im Stack vorhanden“ in AWS CloudFormation?

Lesedauer: 3 Minute
0

Das Erstellen einer Ressource mit meinem AWS CloudFormation-Stack schlägt fehl und ich erhalte eine Fehlermeldung, die mir mitteilt, dass meine Ressource bereits im Stack vorhanden ist. Wie kann ich diesen Fehler beheben?

Kurzbeschreibung

Wenn Sie eine Ressource mit benutzerdefiniertem Namen mit demselben Namen wie eine andere Ressource erstellen und denselben Wert für diese festlegen, kann CloudFormation nicht zwischen ihnen unterscheiden. Sie erhalten dann die Fehlermeldung: „Ressource mit benutzerdefiniertem Namen ist bereits im Stack vorhanden.“ Jede benutzerdefinierte Ressource hat eine eindeutige physische ID. Sie können die physische ID für die meisten Ressourcen, die in CloudFormation definiert sind, nicht wiederverwenden.

Sie können diesen Fehler beheben, indem Sie den Namen der fehlerhaften Ressource in einen eindeutigen Namen ändern. Alternativ können Sie sich dafür entscheiden, den benutzerdefinierten Namen für diese Ressource nicht zu definieren. Wenn Sie keinen benutzerdefinierten Namen festlegen, generiert CloudFormation bei der Erstellung der Ressource einen eindeutigen Namen. Dieser eindeutige Name erzeugt keinen Konflikt mit Ihren vorhandenen Ressourcen.

Lösung

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 benutzerdefinierten Namen hat (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:
........
........

2.Aktualisieren Sie den Namen aller Ressourcen, die einen doppelten Namen haben. Ändern Sie beispielsweise die erste Instance von FinalS3WritePolicy im vorherigen Beispiel zu FinalS3DeletePolicy. Löschen Sie alternativ den benutzerdefinierten Namen.

In den folgenden Beispielen ist Stack A erfolgreich, da jede IAM ManagedPolicy-Ressource einen eindeutigen benutzerdefinierten Namen hat (FinalS3DeletePolicy und FinalS3WritePolicy). Stack B ist erfolgreich, da für keine der ManagedPolicyName-Eigenschaften benutzerdefinierte 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:
........
........

Hinweis: Sie können die Lösung in diesem Artikel für ähnliche Fehler verwenden, die Ressourcen betreffen, die in einem anderen Stack vorhanden sind, oder Ressourcen, die außerhalb von CloudFormation erstellt wurden.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren