Como resolvo o erro "Já existe" que recebo ao reimplantar meu código CDK depois que a pilha da implantação inicial é excluída?

3 minuto de leitura
0

Quero resolver o erro "Já existe" que recebo quando estou reimplantando meu código do AWS Cloud Development Kit (AWS CDK).

Breve descrição

A maioria dos recursos dinâmicos na AWS CDK Construct Library aceita a propriedade removalPolicy com RETAIN como padrão. Os recursos que não têm removalPolicy definida se tornam recursos órfãos e permanecem na conta após a exclusão da pilha. Isso ocorre quando a pilha passa para o estado DELETE_COMPLETE. O comportamento permanece o mesmo quando a definição de recursos semelhantes é removida do código durante uma atualização na pilha correspondente. Se os recursos retidos tiverem nomes personalizados, o erro "Já existe" aparecerá quando você reimplantar o mesmo código.

Para resolver esse erro, conclua as seguintes ações, dependendo do seu caso de uso:

  • Para recursos retidos por acidente, exclua-os manualmente.
  • Para recursos retidos intencionalmente, altere o nome do recurso no código CDK da AWS para um valor exclusivo.
  • Outro método para recursos retidos intencionalmente é excluir o nome do recurso do código do AWS CDK para permitir que o AWS CDK gere um novo nome de forma automática.
  • Antes de excluir uma pilha, confirme se a removalPolicy está definida como DESTROY do recurso.

Resolução

**Observação:**As etapas a seguir usam um exemplo de recurso de bucket do Amazon Simple Storage Service (Amazon S3) representado pela classe s3.bucket no AWS CDK. A removalPolicy desse recurso no AWS CDK é definida como RETAIN por padrão. Esse recurso é retido na conta quando sua respectiva pilha é excluída ou quando o recurso é removido durante uma atualização da pilha.

Exemplo:

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

Exclua manualmente o recurso retido

1.    Faça login no Console de Gerenciamento da AWS e acesse o serviço correspondente dos recursos que você não deseja reter.

2.    Exclua manualmente os recursos que você não deseja reter.

Observação: Neste exemplo, exclua o bucket do Amazon S3 para excluir o recurso s3.bucket.

3.    Reimplante o código do AWS CDK:

cdk deploy

Altere o nome do recurso retido

1.    Acesse o código CDK da AWS do recurso do qual você deseja alterar o nome.

2.    Atualize o nome do recurso para um valor exclusivo que não entre em conflito com o nome do recurso retido.

**Observação:**Neste exemplo, atualize o parâmetro bucketName para alterar o nome do recurso s3.bucket.

Exemplo:

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

Exclua o nome do recurso para permitir que o AWS CDK gere automaticamente um nome exclusivo

1.    Remova o nome do recurso do AWS CDK.

Observação: Neste exemplo, a propriedade bucketName é removida para permitir que o AWS CDK gere automaticamente um novo nome.

Exemplo:

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

2.    Reimplante o código do AWS CDK:

cdk deploy

Defina a removalPolicy como DESTOY

1.    Acesse o código do AWS CDK dos recursos que você não deseja reter.

2.    Defina a propriedade removalPolicy como DESTROY:

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

3.    Execute o cdk synth para acessar o modelo do AWS CloudFormation e, em seguida, verifique se a DeletionPolicy e a UpdateReplacePolicy estão definidas como Excluir:

cdk synth
AWS OFICIAL
AWS OFICIALAtualizada há um ano