Quando eu reimplanto meu código do AWS Cloud Development Kit (AWS CDK), recebo um erro "Já existe".
Resolução
A maioria dos recursos na AWS CDK Construct Library define a propriedade removalPolicy no estado RETAIN por padrão. Se você não definir a propriedade removalPolicy como RETAIN em seus recursos, os recursos se tornam órfãos. Os recursos órfãos permanecem na sua conta da AWS depois que você exclui a pilha e faz a transição para o estado DELETE\ _COMPLETE.
Quando você atualiza a pilha, o AWS CDK remove o recurso. Se você especificou um nome personalizado para os recursos, talvez receba um erro "Já existe" ao reimplantar o mesmo código.
Observação: as etapas a seguir usam um exemplo de recurso de bucket do Amazon Simple Storage Service (Amazon S3) associado à classe s3.bucket no AWS CDK.
Exemplo de recurso com nome personalizado:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'amzn-s3-demo-bucket',
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
Importar o recurso retido para a nova pilha
Conclua as seguintes etapas:
-
Confirme se seu ambiente atende aos requisitos para usar o comando cdk import da interface de linha de comandos (CLI) do AWS CDK.
Observação: você não pode importar um recurso para sua pilha ao atualizar ou criar outros recursos na pilha. Só é possível importar um ou mais recursos em uma única operação de importação.
-
Remova temporariamente todos os outros recursos do seu código, exceto o recurso que você deseja reter. As propriedades definidas do recurso que você importa devem corresponder às propriedades do recurso que você implantou. Por exemplo, importe o recurso retido do bucket do S3 s3-bucket.
Observação: para importar um recurso, você deve definir uma política de remoção para o recurso.
Exemplo de política:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'amzn-s3-demo-bucket',
removalPolicy: RemovalPolicy.RETAIN
});
//const cfnFunction = new lambda.CfnFunction(this, 'MyCfnFunction', {
// code: {
// ...
// s3Bucket: s3Bucket.bucketArn
// },
// role: 'role',
Observação: substitua s3-bucket pelo nome do seu bucket do S3.
-
Execute o seguinte comando cdk import para iniciar a importação do recurso:
cdk import
-
Insira o ID do recurso quando o CDK solicitar. Neste exemplo, insira o nome do bucket do S3.
-
Insira novamente os recursos do seu código e, em seguida, execute o seguinte comando deploy:
cdk deploy
Exclua manualmente o recurso retido
Conclua as seguintes etapas:
- Faça login no Console de Gerenciamento da AWS.
- Selecione o serviço dos recursos que você não deseja reter.
- Exclua manualmente os recursos. Por exemplo, para remover o recurso s3.bucket, exclua o bucket do Amazon S3.
- Para reimplantar o AWS CDK, execute o seguinte comando deploy:
cdk deploy
Altere o nome do recurso retido
Conclua as seguintes etapas:
- Abra o código do AWS CDK para o recurso.
- Atualize o nome do recurso para um valor exclusivo que não entre em conflito com o nome do recurso retido:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'amzn-s3-demo-bucket',
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
**Observação:**O exemplo anterior usa o parâmetro bucketName para alterar o nome do recurso s3.bucket. Substitua amzn-s3-demo-bucket pelo nome do seu bucket do S3.
Excluir o nome do recurso
Para excluir o nome do recurso para que o AWS CDK possa gerar um nome exclusivo, conclua as seguintes etapas:
- Para remover o nome do recurso do AWS CDK, execute o seguinte código:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
Observação: o código de exemplo anterior remove a propriedade bucketName para permitir que o CDK da AWS gere um novo nome.
- Para reimplantar o AWS CDK, execute o seguinte comando deploy:
cdk deploy
Definir a propriedade removalPolicy como DESTROY
Conclua as seguintes etapas:
-
Abra o código do AWS CDK para os recursos.
-
Defina a propriedade removalPolicy como DESTROY:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'amzn-s3-demo-bucket',
removalPolicy: RemovalPolicy.DESTROY
});
-
Para acessar o modelo do AWS CloudFormation, execute o seguinte comando cdk synth:
cdk synth
-
Verifique se a DeletionPolicy e a UpdateReplacePolicy estão definidas como Delete.