Je souhaite résoudre le message d’erreur « Existe déjà » que je reçois lorsque je redéploie mon code AWS Cloud Development Kit (AWS CDK).
Résolution
La plupart des ressources avec état de la bibliothèque AWS CDK Construct acceptent la propriété removalPolicy définie par défaut sur CONSERVER. Pour plus d’informations, consultez la section enum RemovalPolicy sur le site Web d’AWS CDK.
Si vous ne définissez pas la propriété removalPolicy sur vos ressources, celles-ci deviennent orphelines. Elles demeurent dans votre compte AWS une fois que vous avez supprimé la pile et que vous passez à l’état DELETE_COMPLETE. Si vous avez spécifié un nom personnalisé pour les ressources, le message d’erreur « Existe déjà » s’affiche lorsque vous redéployez le même code.
Remarque : les étapes suivantes utilisent un compartiment Amazon Simple Storage Service (Amazon S3) comme exemple de ressource, associé à la classe s3.Bucket dans AWS CDK. Par défaut, la propriété removalPolicy de la ressource est définie sur CONSERVER. Lorsque vous supprimez la pile associée, la ressource est conservée dans votre compte. Lorsque vous mettez à jour la pile, la ressource est supprimée.
Voici un exemple de ressource portant un nom personnalisé :
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'DOC-EXAMPLE-BUCKET1',
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
Supprimer manuellement la ressource conservée
Procédez comme suit :
- Connectez-vous à la console de gestion AWS.
- Choisissez le service des ressources que vous ne souhaitez pas conserver.
- Supprimez les ressources manuellement. Par exemple, pour supprimer la ressource s3.bucket, supprimez le compartiment Amazon S3.
- Pour redéployer le code AWS CDK, exécutez la commande suivante :
cdk deploy
Changer le nom de la ressource conservée
Procédez comme suit :
- Ouvrez le code AWS CDK de la ressource dont vous souhaitez modifier le nom.
- Mettez à jour le nom de la ressource en lui attribuant une valeur unique qui n’entre pas en conflit avec celui de la ressource conservée :
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'EXAMPLE-NEW-NAME-S3-BUCKET',
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
Remarque : l’exemple précédent utilise le paramètre bucketName pour modifier le nom de la ressource s3.Bucket.
Supprimer le nom de la ressource
Supprimez le nom de la ressource de sorte qu’AWS CDK puisse générer un nom unique.
Procédez comme suit :
- Supprimez le nom de la ressource d’AWS CDK :
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
Remarque : l’exemple de code précédent supprime la propriété bucketName pour permettre à AWS CDK de générer un nouveau nom.
- Pour redéployer AWS CDK, exécutez la commande suivante :
cdk deploy
Définir la propriété removalPolicy sur DÉTRUIRE
Avant de supprimer une pile, définissez la propriété removalPolicy de la ressource sur DESTROY.
Procédez comme suit :
-
Ouvrez le code AWS CDK des ressources que vous ne souhaitez pas conserver.
-
Définissez la propriété removalPolicy sur DÉTRUIRE :
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'EXAMPLE-S3-BUCKET',
removalPolicy: RemovalPolicy.DESTROY
});
-
Pour accéder au modèle AWS CloudFormation, exécutez la commande cdk synth suivante :
cdk synth
Vérifiez ensuite que les paramètres DeletionPolicy et UpdateReplacePolicy sont définis sur Supprimer.