본문 바로가기
CSP (Cloud Service Provider)/AWS

S3 대량 객체 삭제 방법(1)

by BTC_쭈콩 2023. 12. 8.

베 하 -! 

안녕하세요 쭈콩입니다 ! 

무언가 오랜만에 적는 것 같은 기분이 들지만, 

아니길 바라는,,바,, 오늘은 S3 버킷을 삭제 하기 위한 객체 삭제에 대해 알아보도록 하겠습니다 ! 

 

 

S3 는 모두가 알고 계시겠지만 한 번 더 설명을 드리자면 !! 

 

 

AWS S3는 Amazon Web Services의 객체 스토리지 서비스로, 데이터를 안전하게 저장하고 검색할 수 있도록 해줍니다. S3는 사용자가 필요에 따라 데이터를 저장하고 관리할 수 있는 스케일링이 가능한 서비스입니다.

파일, 이미지, 비디오, 데이터베이스 백업 등 모든 종류의 데이터를 저장할 수 있으며, 이 데이터는 객체로 저장됩니다.

 

S3의 핵심 기능 중 일부는 다음과 같습니다:

  • 무제한 스토리지: 대용량의 데이터를 저장할 수 있으며, 필요에 따라 저장소 크기를 확장할 수 있습니다.
  • 데이터 보안: 데이터는 여러 복제본으로 저장되며, 암호화 및 접근 제어 기능을 통해 보안이 유지됩니다.
  • 다양한 데이터 관리 기능: 버전 관리, 수명 주기 관리, 데이터 티어링 등을 통해 데이터를 유지, 관리, 분류할 수 있습니다.
  • 고가용성 및 내구성: S3는 고가용성을 제공하여 데이터의 영구적인 보존과 높은 가용성을 보장합니다.

S3 를 사용하면 데이터를 안전하게 저장하고 필요할 때 효과적으로 액세스할 수 있습니다.

S3를 사용하여 웹 호스팅, 데이터 백업, 애플리케이션 데이터 저장 등 다양한 용도로 활용할 수 있습니다.

 

S3를 사용해보신 분들은 아마 알고 계시겠지만, S3는 버킷 안에 객체가 남아 있는 경우 삭제할 수 없습니다. 

때문에 안에 객체를 그대로 두고 버킷 삭제를 진행하시면 버킷이 비워지지 않았다는 에러 문구를 만날 수 있는데요 ! 

버킷이 지워지지 않는 이유가 다양하게 존재하지만, 가장 흔한 이유 몇가지만 알아보겠습니다. 

 

  • 버킷이 비어 있는지 확인하세요 . 객체가 없는 버킷만 삭제할 수 있습니다. 버킷이 비어 있는지 확인하세요.
  • 연결된 액세스 포인트가 없는지 확인하세요 . 연결된 액세스 포인트가 없는 버킷만 삭제할 수 있습니다. 버킷을 삭제하기 전에 버킷에 연결된 모든 액세스 포인트를 삭제하세요.
  • AWS Organizations 서비스 제어 정책(SCP) – 서비스 제어 정책은 버킷에 대한 삭제 권한을 거부할 수 있습니다. SCP에 대한 자세한 내용은 AWS Organizations 사용 설명서  서비스 제어 정책을 참조하십시오 .
  • s3:DeleteBucket 권한 – 버킷을 삭제할 수 없는 경우 IAM 관리자와 협력하여 s3:DeleteBucket권한이 있는지 확인하십시오. IAM 권한을 보거나 업데이트하는 방법에 대한 자세한 내용은 IAM 사용 설명서  IAM 사용자에 대한 권한 변경을 참조하십시오 .
  • s3:DeleteBucket 거부 문  s3:DeleteBucketIAM 정책에 권한이 있고 버킷을 삭제할 수 없는 경우 버킷 정책에 에 대한 거부 문이 포함될 수 있습니다 s3:DeleteBucket. ElasticBeanstalk에서 생성된 버킷에는 기본적으로 이 문이 포함된 정책이 있습니다. 버킷을 삭제하려면 먼저 이 문이나 버킷 정책을 삭제해야 합니다.

위 내용이 AWS가 알려주는 가장 흔한 버킷 삭제 실패 경우입니다 ! 

저희는 오늘 첫 번째 이유 버킷이 비어있는지 확인하기에 대한 방법을 알아보려고 합니다 !! 

 

 

사실 버킷을 비우는 것은 아주 간단합니다. aws s3 콘솔에서 버킷 선택 후 비어있음 버튼을 눌러주면 버킷 내 모든 객체가 삭제되기 때문인데요. 그렇게 쉬운 내용을 오늘 왜 하려고 하는지 궁금하실 것 같습니다. 

 

사실 객체가 얼마 안되는 버킷을 비우는 것은 정말 간단하고 쉽습니다. 

하지만 만일 S3를 생성하여 데이터를 적재한지 시간이 오래되었고, 그로 인해 버킷 내부에 쌓인 데이터의 양이 1T를 넘는다면, 콘솔에서는 객체를 삭제 함에 어려움이 있을 수 있습니다. 

 

심지어 객체가 너무나 많은 대량의 객체라면, 콘솔에서도 해당 객체들이 나열이 안 될만큼 콘솔에서는 더 더욱 지울 수가 없습니다. 버킷을 비우는 몇 가지 방법에 대해서 알아보겠습니다.

 

  • S3 콘솔 사용
  • AWS CLI 사용
  • AWS SDK 사용 
  • 수명 주기 구성 사용 

위 처럼 네 가지 방법을 들 수 있지만 위에서 말씀드린 바와 같이 s3 콘솔에서는 대량의 객체를 지우는데 한계가 있습니다. 

또한 AWS CLI 와 SDK를 사용하는 방법은 아래와 같이 HTTP API를 사용하는 방법입니다. 

aws s3 rm s3://bucket-name --recursive

 

하지만 이 방법 조차 최대 한도가 1000 개 이며, 병렬로 처리할 수도 없기 때문에 만약 1000개 이상의 객체가 존재할 경우 이 또한 삭제에 어려움이 생깁니다. 그래서 s3에서 대량의 객체를 한번에 삭제하는 방법으로 가장 권장하는 방법은 수명 주기 구성을 통해 자체적인 삭제가 이루어지도록 유도하는 것입니다. 

 

그렇다면, 그 방법은 어떻게 하면 될까요??? 수 명 주 기 구 성 ??

 

그 방법에 대해서는 다음 시간에 실습으로 함께 알아보도록 하겠습니다 !! 
그럼 실습을 기대하며 !! 다음시간에 만나요 베빠 !!! 

댓글