S3 버킷에서 오래된 항목을 자동으로 삭제


15

x 일보다 오래된 파일을 자동으로 삭제하도록 s3에 버킷을 설정하는 쉬운 방법이 있습니까?

답변:



19

한편 Amazon은 S3 수명주기를 도입했으며 (소개 블로그 게시물 Amazon S3-객체 만료 참조 ) 버킷에서 객체의 최대 수명을 일 단위로 지정할 수 있습니다 . S3 API 또는 AWS Management를 통한 사용량에 대한 자세한 내용 은 객체 만료 를 참조하십시오. 콘솔.


이 오래된 정보와 관련하여 업데이트를 제공 한 +1입니다. 감사합니다.
Steffen Opel

3

s3cmd를 사용하여 버킷을 통해 실행할 스크립트를 작성하고 사전 조건에 따라 파일을 삭제할 수 있습니다.

그 위에 몇 가지 코드 (bash, python)를 작성해야합니다.

http://s3tools.org/s3cmd 에서 s3cmd를 다운로드 할 수 있습니다 .


3

s3cmd 유틸리티
소스를 사용하여 오래된 버킷을 삭제하는 쉘 스크립트 : http://shout.setfive.com/2011/12/05/deleting-files-older-than-specified-time-with-s3cmd-and-bash/

#!/bin/bash
# Usage: ./deleteOld "bucketname" "30 days"
s3cmd ls s3://$1 | while read -r line;  do

createDate=`echo $line|awk {'print $1" "$2'}`
createDate=`date -d"$createDate" +%s`
olderThan=`date -d"-$2" +%s`
if [[ $createDate -lt $olderThan ]]
  then 
    fileName=`echo $line|awk '{$1=$2=$3=""; print $0}' | sed 's/^[ \t]*//'`
    echo $fileName
    if [[ $fileName != "" ]]
      then
        s3cmd del "$fileName"
    fi
fi
done;

사용법 : ./deleteOld "bucketname" "30 days"예 : s3 : // dir1 / dir2 / dir3 / bucketname = "dir1 / dir2 / dir3 /"는 마지막 "/"를 무시하지 않습니다

파일 이름에 공백이 있고 그 후에 모든 열을 인쇄 해야하는 Video 1280x720 (2)13201781136780000000.mp4경우 나머지는 비디오에 표시하지 않습니다.
Ramratan Gupta

나는에서 솔루션을 가지고 stackoverflow.com/a/9745022/1589444
Ramratan 굽타

1

아니요, S3는 단지 데이터 저장소입니다. 오래된 파일을 주기적으로 삭제하려면 외부 클라이언트를 사용해야합니다.


5
이것은 더 이상 사실입니다 : docs.amazonwebservices.com/AmazonS3/latest/UG/...
감성

1
아, 그게 훨씬 쉬워집니다. 내 백업의 경우 여전히 스크립트에서 삭제를 수행하는 것이 더 좋지만 새 백업이 성공적으로 만들어 졌을 때 오래된 백업 만 제거되도록합니다.
Martijn Heemels

1

AWS CLI를 사용하여 훨씬 빠른 솔루션 삭제 배치를 발견했습니다.

#!/usr/bin/env php
<?php
//remove files which were created 24 hrs ago
$fcmd = 'aws s3 ls s3://<bucket>/<prefix>/ | awk \'{$3=""; print $0}\'';//remove file size and handle file with spaces

exec($fcmd, $output, $return_var);
$seconds_24_hour = 24 * 60 * 60;
$file_deleted_count = 0;
if (!empty($output)) {
    $deleted_keys = array();
    foreach ($output as $file) {
        $file_path = substr($file, 21);
        $file_time_stamp = substr($file, 0, 19); //2017-09-19 07:59:41
        if (time() - strtotime($file_time_stamp) > $seconds_24_hour) {
            $deleted_keys[]["Key"] = "<prefix>/" . $file_path;
            $file_deleted_count++;
        }
    }
    if (!empty($deleted_keys)) {
        $json_data_delete = array("Objects" => $deleted_keys);
        echo $cmd = ("aws s3api delete-objects --bucket <bucket> --delete '" . json_encode($json_data_delete) . "'");
        system($cmd);
    }
    echo "\n$file_deleted_count files deleted from content_media\n";
}

일괄 삭제에 대한 참조 /programming//a/41734090/1589444

패스 케이스가 100 % 인 공간이있는 파일을 처리하기위한 참조 /programming/36813327/how-to-display-only-files-from-aws-s3-ls-command

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.