Come posso risolvere l'errore “Already Exists” che ricevo quando implemento nuovamente il codice AWS CDK dopo avere eliminato lo stack dall’implementazione?

3 minuti di lettura
0

Desidero risolvere l'errore “Already Exists” che ricevo quando implemento nuovamente il codice AWS Cloud Development Kit (AWS CDK).

Soluzione

La maggior parte delle risorse stateful della AWS CDK Construct Library accetta la proprietà removalPolicy con RETAIN come impostazione predefinita. Per ulteriori informazioni, consulta enum RemovalPolicy sul sito Web di AWS CDK.

Se non imposti la proprietà removalPolicy sulle tue risorse, le risorse diventano orfane. Rimangono nell’account AWS dopo l'eliminazione dello stack e la transizione allo stato DELETE_COMPLETE. Se hai specificato un nome personalizzato per le risorse, viene visualizzato l'errore “Already Exists” quando lo stesso codice viene nuovamente implementato.

Nota: i passaggi seguenti utilizzano un esempio di risorsa bucket Amazon Simple Storage Service (Amazon S3) associata alla classe s3.Bucket in AWS CDK. Per impostazione predefinita, la removalPolicy della risorsa è impostata su RETAIN. Quando elimini lo stack associato, la risorsa viene mantenuta nell’account. Quando aggiorni lo stack, la risorsa viene rimossa.

Di seguito è riportato un esempio di risorsa con nome personalizzato:

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

Elimina manualmente la risorsa mantenuta

Completa i seguenti passaggi:

  1. Accedi alla Console di gestione AWS.
  2. Scegli il servizio delle risorse che non desideri mantenere.
  3. Elimina manualmente le risorse. Ad esempio, per rimuovere la risorsa s3.bucket, elimina il bucket Amazon S3.
  4. Per ridistribuire AWS CDK, esegui il comando seguente:
    cdk deploy

Cambia il nome della risorsa mantenuta

Completa i seguenti passaggi:

  1. Apri il codice AWS CDK della risorsa di cui desideri modificare il nome.
  2. Aggiorna il nome della risorsa a un valore univoco che non sia in conflitto con il nome della risorsa mantenuta:
    const s3Bucket = new s3.Bucket(this, 's3-bucket', {
     bucketName: 'EXAMPLE-NEW-NAME-S3-BUCKET',
     versioned: false,
     encryption: s3.BucketEncryption.S3_MANAGED
     });
    Nota: nell’esempio precedente il parametro bucketName viene utilizzato per modificare il nome della risorsa s3.Bucket.

Elimina il nome della risorsa

Elimina il nome della risorsa in modo che AWS CDK possa generare un nome univoco.

Completa i seguenti passaggi:

  1. Rimuovi il nome della risorsa da AWS CDK:
    const s3Bucket = new s3.Bucket(this, 's3-bucket', {
     versioned: false,
     encryption: s3.BucketEncryption.S3_MANAGED
     });
    Nota: il codice di esempio precedente rimuove la proprietà bucketName per consentire ad AWS CDK di generare un nuovo nome.
  2. Per implementare nuovamente AWS CDK, esegui il comando seguente:
    cdk deploy

Imposta la removalPolicy su DESTROY

Prima di eliminare uno stack, imposta la removalPolicy della risorsa su DESTROY.

Completa i seguenti passaggi:

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

  2. Imposta la proprietà removalPolicy su DESTROY:

    const s3Bucket = new s3.Bucket(this, 's3-bucket', {
     bucketName: 'EXAMPLE-S3-BUCKET',
     removalPolicy: RemovalPolicy.DESTROY
     });
  3. Per accedere al modello AWS CloudFormation, esegui il seguente comando cdk synth:

    cdk synth

    Quindi, verifica che DeletionPolicy e UpdateReplacePolicy siano impostate su Elimina.

AWS UFFICIALE
AWS UFFICIALEAggiornata 4 mesi fa