초기 배포의 스택을 삭제한 후 CDK 코드를 재배포할 때 나타나는 “이미 존재함” 오류를 해결하려면 어떻게 해야 하나요?

2분 분량
0

AWS Cloud Development Kit(AWS CDK) 코드를 재배포할 때 나타나는 “이미 존재함” 오류를 해결하고 싶습니다.

간략한 설명

AWS CDK 구성 라이브러리에 있는 대부분의 스테이트풀 리소스는 RETAIN을 기본값으로 사용하는 removalPolicy 속성을 허용합니다. removalPolicy가 설정되지 않은 리소스는 고립된 리소스가 되며 스택이 삭제된 후에도 계정에 남아 있습니다. 이는 스택이 DELETE_COMPLETE 상태로 전환될 때 발생합니다. 해당 스택에서 업데이트하는 동안 유사한 리소스의 리소스 정의가 코드에서 제거되어도 동작은 동일하게 유지됩니다. 보존된 리소스가 사용자 지정 이름인 경우 동일한 코드를 재배포하면 “이미 존재함” 오류가 나타납니다.

이 오류를 해결하려면 사용 사례에 따라 다음 작업을 완료하세요.

  • 실수로 보존된 리소스의 경우 리소스를 수동으로 삭제합니다.
  • 의도적으로 보존한 리소스의 경우 AWS CDK 코드의 리소스 이름을 고유한 값으로 변경합니다.
  • 리소스를 의도적으로 유지하는 또 다른 방법은 AWS CDK가 새 이름을 자동 생성하도록 AWS CDK 코드에서 리소스 이름을 삭제하는 것입니다.
  • 스택을 삭제하기 전에 removalPolicy가 리소스에서 DESTROY로 설정되어 있는지 확인합니다.

해결 방법

**참고:**다음 단계에서는 AWS CDK에서 s3.Bucket 클래스로 표시되는 예제 Amazon Simple Storage Service(S3) 버킷 리소스를 사용합니다. AWS CDK에서 이 리소스의 removalPolicy는 기본적으로 RETAIN으로 설정되어 있습니다. 이 리소스는 해당 스택이 삭제되거나 스택 업데이트 중에 리소스가 제거될 때 계정에 유지됩니다.

예시:

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

보존된 리소스를 수동으로 삭제

1.AWS Management Console에 로그인하고 유지하지 않으려는 리소스의 해당 서비스에 액세스합니다.

2.유지하지 않으려는 리소스를 수동으로 삭제합니다.

**참고:**이 예에서는 Amazon S3 버킷을 삭제하여 s3.bucket 리소스를 삭제합니다.

3.AWS CDK 코드를 다시 배포합니다.

cdk deploy

보존된 리소스의 이름 변경

1.이름을 변경하려는 리소스의 AWS CDK 코드에 액세스합니다.

2.리소스의 이름을 보존된 리소스 이름과 충돌하지 않는 고유한 값으로 업데이트합니다.

**참고:**이 예에서는 bucketName 파라미터를 업데이트하여 s3.bucket 리소스의 이름을 변경합니다.

예시:

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

AWS CDK에서 고유한 이름을 자동 생성할 수 있도록 리소스 이름 삭제

1.AWS CDK에서 리소스 이름을 제거합니다.

**참고:**이 예에서는 AWS CDK가 새 이름을 자동으로 생성할 수 있도록 bucketName 속성이 제거됩니다.

예시:

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

2.AWS CDK 코드를 재배포합니다.

cdk deploy

removalPolicy를 DESTROY로 설정

1.유지하지 않으려는 리소스의 AWS CDK 코드에 액세스합니다.

2.removalPolicy 속성을 DESTROY로 설정합니다.

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

3.cdk synth를 실행하여 AWS CloudFormation 템플릿에 액세스한 다음, DeletionPolicyUpdateReplacePolicy삭제로 설정되어 있는지 확인합니다.

cdk synth
AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음