Wie behebe ich den Fehler „Bereits vorhanden“, der angezeigt wird, wenn ich meinen CDK-Code erneut bereitstelle, nachdem der Stack aus der ersten Bereitstellung gelöscht wurde?

Lesedauer: 3 Minute
0

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.

Kurze Beschreibung

Die meisten Stateful-Ressourcen in der AWS CDK Construct Library akzeptieren die Eigenschaft removalPolicy mit RETAIN als Standard. Ressourcen, die nicht über dasremovalPolicy-Set verfügen, werden zu verwaisten Ressourcen und verbleiben im Konto, nachdem der Stack gelöscht wurde. Dies tritt auf, wenn der Stack in den Status DELETE_COMPLETE übergeht. Das Verhalten bleibt dasselbe, wenn die Ressourcendefinition ähnlicher Ressourcen während eines Updates auf dem entsprechenden Stack aus dem Code entfernt wird. Wenn die beibehaltenen Ressourcen einen benutzerdefinierten Namen haben, wird der Fehler „Bereits vorhanden“ angezeigt, wenn Sie denselben Code erneut bereitstellen.

Gehen Sie je nach Anwendungsfall wie folgt vor, um diesen Fehler zu beheben:

  • Löschen Sie bei unbeabsichtigt beibehaltene Ressourcen die Ressourcen manuell.
  • Ändern Sie für absichtlich beibehaltene Ressourcen den Namen der Ressource im AWS CDK-Code zu einem eindeutigen Wert.
  • Eine andere Methode für absichtlich beibehaltene Ressourcen besteht darin, den Ressourcennamen aus dem AWS CDK-Code zu löschen, damit AWS CDK automatisch einen neuen Namen generiert.
  • Vergewissern Sie sich vor dem Löschen eines Stacks, dass die removalPolicy von der Ressource auf DESTROY gesetzt ist.

Lösung

**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. Die removalPolicy dieser Ressource in AWS CDK ist standardmäßig auf RETAIN festgelegt. Diese Ressource wird im Konto beibehalten, wenn der entsprechende Stack gelöscht wird oder wenn die Ressource während einer Stack-Aktualisierung entfernt wird.

Beispiel:

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

1.Melden Sie sich bei der AWS-Managementkonsole an und greifen Sie auf den entsprechenden Service für die Ressourcen zu, die Sie nicht beibehalten möchten.

2.Löschen Sie manuell die Ressourcen, die Sie nicht beibehalten möchten.

**Hinweis:**Löschen Sie bei diesem Beispiel den Amazon S3-Bucket, um die Ressource s3.bucket zu löschen.

3.Stellen Sie den AWS CDK-Code erneut bereit:

cdk deploy

Den Namen der beibehaltenen Ressource ändern

1.Greifen Sie auf den AWS CDK-Code der Ressource zu, deren Namen Sie ändern möchten.

2.Aktualisieren Sie den Namen der Ressource auf einen eindeutigen Wert, der nicht mit dem Namen der beibehaltenen Ressource kollidiert.

**Hinweis:**Aktualisieren Sie bei diesem Beispiel den bucketName-Parameter, um den Namen der Ressource s3.bucket zu ändern.

Beispiel:

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 bucketName: ‘EXAMPLE-NEW-NAME-S3-BUCKET’,
 versioned: false,
 encryption: s3.BucketEncryption.S3_MANAGED
 });

Löschen Sie den Ressourcennamen, damit AWS CDK automatisch einen eindeutigen Namen generieren kann

1.Entfernen Sie den Ressourcennamen aus AWS CDK.

**Hinweis:**In diesem Beispiel wird die Eigenschaft bucketName entfernt, damit AWS CDK automatisch einen neuen Namen generiert.

Beispiel:

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 versioned: false,
 encryption: s3.BucketEncryption.S3_MANAGED
 });

2.Stellen Sie den AWS CDK-Code erneut bereit:

cdk deploy

Setzen Sie die removalPolicy auf DESTROY

1.Greifen Sie auf den AWS CDK-Code der Ressourcen zu, die Sie nicht beibehalten möchten.

2.Setzen Sie die Eigenschaft removalPolicy auf DESTROY:

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 bucketName: ‘EXAMPLE-S3-BUCKET’,
 removalPolicy: RemovalPolicy.DESTROY
 });

3.Führen Sie cdk synth aus, um auf die AWS CloudFormation-Vorlage zuzugreifen, und überprüfen Sie dann, ob DeletionPolicy und UpdateReplacePolicy auf Delete gesetzt sind:

cdk synth
AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr