Ich möchte den Fehler „Bereits vorhanden“ beheben, der angezeigt wird, wenn ich meinen Code für das AWS Cloud Development Kit (AWS CDK) erneut bereitstelle.
Behebung
Die meisten Stateful-Ressourcen in der AWS CDK Construct Library akzeptieren die Eigenschaft removalPolicy mit RETAIN als Standard. Weitere Informationen finden Sie unter enum RemovalPolicy auf der AWS-CDK-Website.
Wenn Sie die Eigenschaft removalPolicy für Ihre Ressourcen nicht festlegen, werden die Ressourcen verwaist. Sie verbleiben in Ihrem AWS-Konto, nachdem Sie den Stack gelöscht haben, und gehen in den Status DELETE_COMPLETE über. Wenn Sie einen benutzerdefinierten Namen für die Ressourcen angegeben haben, wird der Fehler „Bereits vorhanden“ angezeigt, wenn Sie denselben Code erneut bereitstellen.
Hinweis: In den folgenden Schritten wird eine Beispiel-Bucket-Ressource von Amazon Simple Storage Service (Amazon S3) verwendet, die durch die Klasse s3.Bucket in AWS CDK dargestellt wird. Standardmäßig ist die removalPolicy der Ressource auf RETAIN gesetzt. Wenn Sie den zugehörigen Stack löschen, bleibt die Ressource in Ihrem Konto erhalten. Wenn Sie den Stapel aktualisieren, wird die Ressource entfernt.
Das Folgende ist ein Beispiel für eine Ressource mit benutzerdefiniertem Namen:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'DOC-EXAMPLE-BUCKET1',
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
Manuelles Löschen der beibehaltenen Ressource
Führen Sie die folgenden Schritte aus:
- Melden Sie sich bei der AWS-Managementkonsole an.
- Wählen Sie den Service der Ressourcen, die Sie nicht behalten möchten.
- Löschen Sie die Ressourcen manuell. Um beispielsweise die Ressource s3.bucket zu entfernen, löschen Sie den Amazon-S3-Bucket.
- Führen Sie den folgenden Befehl aus, um das AWS CDK erneut bereitzustellen:
cdk deploy
Den Namen der beibehaltenen Ressource ändern
Führen Sie die folgenden Schritte aus:
- Öffnen Sie auf den AWS-CDK-Code der Ressource, deren Namen Sie ändern möchten.
- Aktualisieren Sie den Namen der Ressource auf einen eindeutigen Wert, der nicht mit dem Namen der beibehaltenen Ressource kollidiert:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'EXAMPLE-NEW-NAME-S3-BUCKET',
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
Hinweis: Aktualisieren Sie bei diesem Beispiel den Parameter bucketName, um den Namen der Ressource s3.Bucket zu ändern.
Den Ressourcennamen löschen
Löschen Sie den Ressourcennamen, damit AWS CDK einen eindeutigen Namen generieren kann.
Führen Sie die folgenden Schritte aus:
- Entfernen Sie den Ressourcennamen aus AWS CDK:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
Hinweis: Der vorherige Beispielcode entfernt die Eigenschaft bucketName, damit AWS CDK einen neuen Namen generieren kann.
- Führen Sie den folgenden Befehl aus, um AWS CDK erneut bereitzustellen:
cdk deploy
Die removalPolicy auf DESTROY setzen
Bevor Sie einen Stapel löschen, setzen Sie die removalPolicy der Ressource auf DESTROY.
Führen Sie die folgenden Schritte aus:
-
Öffnen Sie auf den AWS-CDK-Code der Ressourcen, die Sie nicht beibehalten möchten.
-
Setzen Sie die Eigenschaft removalPolicy auf DESTROY:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'EXAMPLE-S3-BUCKET',
removalPolicy: RemovalPolicy.DESTROY
});
-
Um auf die AWS-CloudFormation-Vorlage zuzugreifen, führen Sie den folgenden cdk synth-Befehl aus:
cdk synth
Stellen Sie dann sicher, dass DeletionPolicy und UpdateReplacePolicy auf Delete gesetzt sind.