Quiero solucionar el error «Ya existe» que aparece cuando vuelvo a desplegar mi código de AWS Cloud Development Kit (AWS CDK).
Solución
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. Para obtener más información, consulte enum RemovalPolicy en el sitio web de AWS CDK.
Si no define la propiedad removalPolicy en sus recursos, se quedarán sin responsable. Permanecerán en su cuenta de AWS después de eliminar la pila y pasarán al estado DELETE_COMPLETE. Si especificó un nombre personalizado para los recursos, aparecerá el error «Ya existe» cuando vuelva a implementar el mismo código.
Nota: En los siguientes pasos se utilizan un ejemplo de recurso de bucket de Amazon Simple Storage Service (Amazon S3) asociado a la clase s3.Tucket en AWS CDK. De forma predeterminada, la propiedad removalPolicy está definida con RETAIN. Si elimina la pila asociada, el recurso se retendrá en la cuenta. Cuando se actualiza la pila, se elimina el recurso.
A continuación se muestra un ejemplo de un recurso con nombre personalizado:
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
Siga estos pasos:
- Inicie sesión en la consola de administración de AWS.
- Elija el servicio de los recursos que no desee retener.
- Elimine los recursos manualmente. Por ejemplo, para eliminar el recurso s3.bucket, borre el bucket de Amazon S3.
- Para volver a desplegar AWS CDK, ejecute el siguiente comando:
cdk deploy
Cambio del nombre del recurso retenido
Siga estos pasos:
- Abra el código de AWS CDK del recurso cuyo nombre desee cambiar.
- Actualice el nombre del recurso a un valor único que no entre en conflicto con el nombre del recurso retenido:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'EXAMPLE-NEW-NAME-S3-BUCKET',
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
Nota: En el ejemplo anterior se utiliza el parámetro bucketName para cambiar el nombre del recurso s3.Bucket.
Eliminación del nombre de un recurso
Elimine el nombre del recurso para que AWS CDK pueda generar un nombre único.
Siga estos pasos:
- Elimine el nombre del recurso en AWS CDK:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
Nota: El código del ejemplo anterior elimina la propiedad bucketName para permitir que AWS CDK genere otro nombre nuevo.
- Para volver a desplegar AWS CDK, ejecute el siguiente comando:
cdk deploy
Definición de removalPolicy como DESTROY
Antes de eliminar una pila, defina la propiedad removalPolicy del recurso como DESTROY.
Siga estos pasos:
-
Abra el código de AWS CDK de los recursos que no desee retener.
-
Defina la propiedad removalPolicy como DESTROY:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'EXAMPLE-S3-BUCKET',
removalPolicy: RemovalPolicy.DESTROY
});
-
Para acceder a la plantilla de AWS CloudFormation, ejecute el siguiente comando cdk synth:
cdk synth
A continuación, compruebe que tanto DeletionPolicy como UpdateReplacePolicy se hayan definido como Eliminar.