Ich möchte den Fehler „Resource already exists in the stack“ für meinen Stack in AWS CloudFormation beheben.
Kurzbeschreibung
Jede Ressource hat eine eindeutige physische ID und du kannst die physische ID für die meisten in CloudFormation definierten Ressourcen nicht wiederverwenden.
Wenn du einen Stack erstellst und die Ressourcen denselben Namen und denselben Wert wie eine andere Ressource haben, kann CloudFormation nicht zwischen den Ressourcen unterscheiden. Dann erhältst du die Fehlermeldung „Resource already exists in stack“. Du erhältst diesen Fehler möglicherweise auch, wenn Ressourcen, die CloudFormation nicht definiert oder verwaltet, mit derselben physischen ID im AWS-Konto oder in der AWS-Region existieren.
Um dieses Problem zu beheben, ändere den Namen der fehlgeschlagenen Ressource in einen eindeutigen Namen oder definiere keinen Namen für diese Ressource. Wenn du keinen Namen definierst, generiert CloudFormation beim Erstellen der Ressource einen eindeutigen Namen. Dieser eindeutige Name erzeugt keinen Konflikt mit deinen vorhandenen Ressourcen.
Behebung
Hinweis: Du kannst die folgende Lösung für verwandte Fehler bei Ressourcen verwenden, die in einem anderen Stack existieren oder die du mit anderen AWS-Services erstellt hast. Beispielsweise erhältst du diesen Fehler möglicherweise bei Amazon Simple Queue Service (Amazon SQS)-Warteschlangen, deren ID bereits vorhanden ist.
Namen deiner Ressourcen überprüfen
Prüfe in der CloudFormation-Vorlage, die deine fehlerhafte Ressource enthält, ob andere explizit deklarierte Ressourcen denselben Namen wie deine fehlerhafte Ressource haben.
Im folgenden Beispiel schlägt der Stack fehl, weil jede AWS Identity and Access Management (IAM)-ManagedPolicy-Ressource denselben FinalS3WritePolicy-Namen hat:
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:
........
........
Den Namen deiner doppelten Ressource aktualisieren
Aktualisiere den Namen einer Ressource mit einem doppelten Namen. Ändere beispielsweise das erste Vorkommen von FinalS3WritePolicy in FinalS3DeletePolicy. Oder entferne 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.
Beispiel für 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:
........
........
Beispiel für Stack B:
S3DeletePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........
S3WritePolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
........
........