¿Cómo soluciono el error “Ya existe” que aparece cuando vuelvo a desplegar mi código de CDK después de eliminar la pila del despliegue inicial?

4 minutos de lectura
0

Quiero resolver el error “Ya existe” que aparece al volver a desplegar mi código de AWS Cloud Development Kit (AWS CDK).

Descripción breve

La mayoría de los recursos con estado de la biblioteca de componentes de AWS CDK aceptan la propiedad removalPolicy con RETAIN como valor predeterminado. Los recursos que no tienen la propiedad removalPolicy definida se convierten en recursos huérfanos y permanecen en la cuenta después de eliminar la pila. Esto ocurre cuando la pila pasa al estado DELETE_COMPLETE. El comportamiento sigue siendo el mismo cuando la definición del recurso de recursos similares se elimina del código durante una actualización de la pila correspondiente. Si los recursos retenidos tienen un nombre personalizado, aparecerá el error “Ya existe” al volver a desplegar el mismo código.

Para resolver este error, realice las siguientes acciones según su caso de uso:

  • En el caso de los recursos retenidos de forma involuntaria, elimínelos manualmente.
  • En el caso de los recursos retenidos intencionalmente, cambie el nombre del recurso en el código de AWS CDK por un valor único.
  • Otro método para los recursos retenidos de forma intencionada consiste en eliminar el nombre del recurso del código de AWS CDK para que AWS CDK genere automáticamente un nombre nuevo.
  • Antes de eliminar una pila, confirme que la propiedad removalPolicy esté definida como DESTROY en el recurso.

Solución

Nota: Los siguientes pasos utilizan un ejemplo de recurso de bucket de Amazon Simple Storage Service (Amazon S3) representado por la clase s3.bucket de AWS CDK. La propiedad removalPolicy de este recurso de AWS CDK está definida como RETAIN de forma predeterminada. Este recurso se retiene en la cuenta cuando se elimina su pila correspondiente o cuando se elimina el recurso durante una actualización de la pila.

Ejemplo:

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

Eliminación manual del recurso retenido

1.    Inicie sesión en la consola de administración de AWS y acceda al servicio correspondiente de los recursos que no desee retener.

2.    Elimine manualmente los recursos que no desee retener.

Nota: En este ejemplo, elimine el bucket de Amazon S3 para eliminar el recurso s3.bucket.

3.    Vuelva a desplegar el código de AWS CDK:

cdk deploy

Cambio del nombre del recurso retenido

1.    Acceda al código de AWS CDK del recurso cuyo nombre desee cambiar.

2.    Actualice el nombre del recurso a un valor único que no entre en conflicto con el nombre del recurso retenido.

Nota: En este ejemplo, actualice el parámetro bucketName para cambiar el nombre del recurso s3.bucket.

Ejemplo:

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

Eliminación del nombre del recurso para permitir que AWS CDK genere automáticamente un nombre único

1.    Elimine el nombre del recurso de AWS CDK.

Nota: En este ejemplo, se elimina la propiedad bucketName para que AWS CDK genere automáticamente un nombre nuevo.

Ejemplo:

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

2.    Vuelva a desplegar el código de AWS CDK:

cdk deploy

Definición de removalPolicy como DESTROY

1.    Acceda al código de AWS CDK de los recursos que no desee retener.

2.    Defina la propiedad removalPolicy como DESTROY:

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

3.    Ejecute cdk synth para acceder a la plantilla de AWS CloudFormation y, a continuación, compruebe que DeletionPolicy y UpdateReplacePolicy estén definidas como Delete:

cdk synth
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año