AWS Cloud Development Kit(AWS CDK) 코드를 재배포할 때 나타나는 “이미 존재함” 오류를 해결하고 싶습니다.
해결 방법
AWS CDK 구성 라이브러리에 있는 대부분의 스테이트풀 리소스는 RETAIN을 기본값으로 사용하는 removalPolicy 속성을 허용합니다. 자세한 내용은 AWS CDK 웹사이트에서 enum RemovalPolicy를 참조하세요.
리소스에 removalPolicy 속성을 설정하지 않으면 리소스가 분리됩니다. 스택을 삭제한 후에도 AWS 계정에 남아 있으며 DELETE_COMPLETE 상태로 전환됩니다. 리소스의 사용자 지정 이름을 지정한 경우 동일한 코드를 재배포하면 “이미 존재함” 오류가 나타납니다.
참고: 다음 단계에서는 AWS CDK에서 s3.Bucket 클래스와 관련된 예제 Amazon Simple Storage Service(Amazon S3) 버킷 리소스를 사용합니다. 기본적으로 리소스의 removalPolicy는 RETAIN으로 설정됩니다. 관련 스택을 삭제하면 리소스가 계정에 유지됩니다. 스택을 업데이트하면 리소스가 제거됩니다.
다음은 사용자 지정 이름이 지정된 리소스의 예입니다.
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'DOC-EXAMPLE-BUCKET1',
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
보존된 리소스를 수동으로 삭제
다음 단계를 완료합니다.
- AWS Management Console에 로그인합니다.
- 유지하지 않을 리소스의 서비스를 선택합니다.
- 해당 리소스를 수동으로 삭제합니다. 예를 들어 s3.bucket 리소스를 삭제하려면 Amazon S3 버킷을 삭제합니다.
- AWS CDK를 다시 배포하려면 다음 명령을 실행합니다.
cdk deploy
유지된 리소스의 이름 변경
다음 단계를 완료합니다.
- 이름을 변경할 리소스의 AWS CDK 코드를 엽니다.
- 리소스의 이름을 유지된 리소스의 이름과 충돌하지 않는 고유한 값으로 업데이트합니다.
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'EXAMPLE-NEW-NAME-S3-BUCKET',
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
참고: 위 예제에서는 bucketName 파라미터를 사용하여 s3.Bucket 리소스의 이름을 변경합니다.
리소스 이름 삭제
AWS CDK가 고유한 이름을 생성할 수 있도록 리소스 이름을 삭제합니다.
다음 단계를 완료합니다.
- AWS CDK에서 리소스 이름을 제거합니다.
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
참고: 위의 예제 코드는 bucketName 속성을 제거하여 AWS CDK가 새 이름을 생성할 수 있습니다.
- AWS CDK를 다시 배포하려면 다음 명령을 실행합니다.
cdk deploy
removalPolicy를 DESTROY로 설정
스택을 삭제하기 전에 리소스의 removalPolicy를 DESTROY로 설정합니다.
다음 단계를 완료합니다.
-
유지하지 않을 리소스의 AWS CDK 코드를 엽니다.
-
removalPolicy 속성을 DESTROY로 설정합니다.
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'EXAMPLE-S3-BUCKET',
removalPolicy: RemovalPolicy.DESTROY
});
-
AWS CloudFormation 템플릿에 액세스하려면 다음 cdk synth 명령을 실행합니다.
cdk synth
그런 다음 DeletionPolicy 및 UpdateReplacePolicy가 Delete로 설정되어 있는지 확인합니다.