[AWS] s3 버킷에 Object를 완전히 삭제하는 3가지 방법
IT/AWS

[AWS] s3 버킷에 Object를 완전히 삭제하는 3가지 방법

반응형

Intro

S3를 보면 클라우드상에 파일을 저장하는 간단한 서비스이지만 어떻게 구현되어있는지를 보면 많은 이야기를 할 수 있는 서비스죠. 우선 S3 AWS의 가장 대표적인 서비스로 Object Stroage 입니다. Object Storage는 하나의 객체가 key 값과 같은 메타데이터를 갖고 있는 형태의 데이터 입니다. 실제로 s3 버킷안에 폴더가 존재합니다만 사실 구조화된 파일 스토리지와 달리 단지 파일의 경로가 key가 되며이 객체는 key 정보를 메타데이터로 갖고 있게 되죠. 때문에 각 객체에는 key와 같은 고유의 식별자가 있어서 분산된 시스템 내 어디에 저장되어 있든지 상관없이 데이터를 빠르고 쉽게 찾을 수 있습니다.

이와 같은 이유로 S3는 빅데이터 분석을 위한 대량의 데이터를 저장하는 datalake 역할로 사용되고 있는데요. 오늘은 의도치 않게 대량으로 쌓인 S3 버킷에 Object들을 완전히 삭제하고 싶을때 어떻게 할 수 있을지 몇가지를 알려드리고 가장 쉬운 방법도 알려드리도록 하겠습니다.

AWS 콘솔에서 Bucket empty를 사용하여 삭제

이 방법은 가장 쉬운 방법입니다만 웹 콘솔을 이용해야하기 때문에 웹 콘솔의 세션을 계속 유지해야 합니다. 테라단위의 데이터를 삭제하기 위해서는 24이상 소요될 수 있기 때문에 좋은 방법은 아닙니다.

AWS CLI를 사용하여 삭제

그 다음 일반적으로 생각할 수 있는 방법입니다. CLI명령을 날리는 서버 또는 PC에 세션이 끊기면 안되기 때문에 다음과 같이 background로 실행하고, 실행 결과를 로그로 기록 해야 좋습니다.

nohup aws s3 rm s3://your-bucket-name --recursive > output.log 2>&1 &

AWS Lifecycle 기능을 사용하여 삭제

오늘 소개할 방법 중 가장 효과적이고 좋은 방법인데요 AWS의 Lifecycle 기능을 사용하여 삭제하는 방법입니다. AWS s3 Lifecycle은 객체를 생성한 후 일정 기간이 지나거나 특정 조건이 충족될 때 객체를 자동으로 삭제하거나 스토리지 클래스를 변경할 수 있습니다.
AWS 콘솔을 사용하여 Lifecycle 설정을 할 수 도 있지만 AWS cli를 사용 하여 다음과 같이 간단하게 하루가 지난 데이터를 삭제하는 Lifecycle 규칙을 만들어 보겠습니다. 내용을 보시면 FullDelete 와 DeleteMarkers 규칙을 만드는데요. DeleteMarkers 가 무엇 인지는 다음 시간에 이야기 해보도록 하겠습니다.

cat <<EOF > lifecycle.json
{
    "Rules": [{
            "Expiration": {
                "Days": 1
            },
            "ID": "FullDelete",
            "Filter": {
                "Prefix": ""
            },
            "Status": "Enabled",
            "NoncurrentVersionExpiration": {
                "NoncurrentDays": 1
            },
            "AbortIncompleteMultipartUpload": {
                "DaysAfterInitiation": 1
            }
        },
        {
            "Expiration": {
                "ExpiredObjectDeleteMarker": true
            },
            "ID": "DeleteMarkers",
            "Filter": {
                "Prefix": ""
            },
            "Status": "Enabled"
        }
    ]
}
EOF

aws s3api put-bucket-lifecycle-configuration \
--bucket your-bucket-name \
--lifecycle-configuration file://lifecycle.json

AWS 콘솔을 통해서 Lifecycle 규칙을 생성하는 방법은 아래와 같습니다. [해당 버킷 선택] - [Management 선택] -[ Create Lifecycle 선택]

  • FullDelete 규칙 생성
  • DeleteMakers 규칙 생성

위 캡처와 같이 2가지 규칙을 생성하면 하루가 지나면 모든 데이터가 삭제되는걸 확인할 수 있습니다.

오늘 글이 도움이 되었다면 좋아요를 눌러주세요. 감사합니다 :)

반응형