Come posso risolvere l'errore «Già esiste» che ricevo quando ridistribuisco il mio codice CDK dopo l'eliminazione dello stack della distribuzione iniziale?

3 minuti di lettura
0

Voglio risolvere l'errore «Already Exists» che ricevo quando ridistribuisco il mio codice AWS Cloud Development Kit (AWS CDK).

Breve descrizione

La maggior parte delle risorse stateful della AWS CDK Construct Library accetta la proprietà RemovalPolicy con RETAIN come impostazione predefinita. Le risorse che non dispongono del set removalPolicy diventano risorse orfane e rimangono nell'account dopo l'eliminazione dello stack. Ciò si verifica quando lo stack passa allo stato ** DELETE_COMPLETE**. Il comportamento rimane lo stesso quando la definizione di risorsa di risorse simili viene rimossa dal codice durante un aggiornamento dello stack corrispondente. Se le risorse conservate hanno un nome personalizzato, viene visualizzato l'errore «Già esiste» quando si ridistribuisce lo stesso codice.

Per risolvere questo errore, completa le seguenti azioni a seconda del tuo caso d'uso:

  • Per le risorse conservate involontariamente, elimina manualmente le risorse.
  • Per le risorse conservate intenzionalmente, modifica il nome della risorsa nel codice AWS CDK con un valore univoco.
  • Un altro metodo per conservare intenzionalmente le risorse consiste nell'eliminare il nome della risorsa dal codice AWS CDK per consentire ad AWS CDK di generare automaticamente un nuovo nome.
  • Prima di eliminare uno stack, conferma che removalPolicy sia impostato su DESTROY dalla risorsa.

Risoluzione

Nota: I passaggi seguenti utilizzano un esempio di risorsa bucket Amazon Simple Storage Service (Amazon S3) rappresentata dalla classe s3.Bucket in AWS CDK. La removalPolicy di questa risorsa in AWS CDK è impostata su RETAIN per impostazione predefinita. Questa risorsa viene conservata nell'account quando il rispettivo stack viene eliminato o quando la risorsa viene rimossa durante un aggiornamento dello stack.

Esempio:

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

Eliminare manualmente la risorsa conservata

  1. Accedi alla Console di gestione AWS e accedi al servizio corrispondente delle risorse che non desideri conservare.

  2. Elimina manualmente le risorse che non desideri conservare.

Nota: Per questo esempio, elimina il bucket Amazon S3 per eliminare la risorsa s3.bucket.

  1. Ridistribuisci il codice AWS CDK:
cdk deploy

Cambia il nome della risorsa conservata

  1. Accedi al codice AWS CDK della risorsa di cui desideri modificare il nome.

  2. Aggiorna il nome della risorsa con un valore univoco che non sia in conflitto con il nome della risorsa conservata.

Nota: Per questo esempio, aggiorna il parametro bucketName per modificare il nome della risorsa s3.bucket.

Esempio:

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

Elimina il nome della risorsa per consentire ad AWS CDK di generare automaticamente un nome univoco

  1. Rimuovi il nome della risorsa da AWS CDK.

**Nota:**Per questo esempio, la ** proprietà ** bucketName viene rimossa per consentire ad AWS CDK di generare automaticamente un nuovo nome.

Esempio:

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 versioned: false,
 encryption: s3.BucketEncryption.S3_MANAGED
 });
  1. Ridistribuisci il codice AWS CDK:
cdk deploy

Imposta la politica di rimozione su DESTROY

  1. Accedi al codice AWS CDK delle risorse che non desideri conservare.

  2. Imposta la proprietà removalPolicy su DESTROY:

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 bucketName: ‘EXAMPLE-S3-BUCKET’,
 removalPolicy: RemovalPolicy.DESTROY
 });
  1. Esegui cdk synth per accedere al modello AWS CloudFormation, quindi controlla che DeletionPolicy e UpdateReplacePolicy siano impostati su Delete:
cdk synth
AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa