s3バケットから古いアイテムを自動的に削除する


15

s3にバケットを設定してx日より古いファイルを自動的に削除する簡単な方法はありますか?

回答:



19

一方、AmazonはS3ライフサイクルを導入しています(ブログの紹介記事Amazon S3-Object Expirationを参照)。バケット内のオブジェクトの最大日数を指定できます-S3 APIまたはAWS Managementを介した使用の詳細については、Object Expirationを参照してくださいコンソール。


この古い情報に関する更新プログラムを提供してくれてありがとう、ありがとう!
ステフェンオペル

3

s3cmdを使用して、バケットを実行し、前提条件に基づいてファイルを削除するスクリプトを作成できます。

その上にいくつかのコード(bash、python)を書く必要があります。

s3cmdはhttp://s3tools.org/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は、Videoに残りの部分ではなく、単に与えます。
ラムラタングプタ


1

いいえ、S3は単なるデータストアです。古いファイルを定期的に削除するには、外部クライアントを使用する必要があります。


5
これはもはや真実ではありません:docs.amazonwebservices.com/AmazonS3/latest/UG/…–
タビサ

1
ああ、それは物事をはるかに簡単にします。ただし、バックアップの場合は、スクリプトから削除を実行することを好みますが、古いバックアップは新しいバックアップが正常に作成されたときにのみ削除されるようにします。
マルタイン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.