Автоматично видаляйте старі елементи з відра s3


15

Чи є простий спосіб налаштувати відро в s3 для автоматичного видалення файлів старших x днів?

Відповіді:



19

Амазонка тим часом представила життєві цикли S3 (див. Вступний пост у блозі Amazon S3 - Термін дії об'єкта ), де ви можете вказати максимальний вік у днях для об'єктів у відрі - детальну інформацію про його використання можна знайти у розділі " Expiration Object" за допомогою API S3 або управління AWS Консоль.


+1 за надання актуальної інформації щодо цієї застарілої інформації, дякую!
Steffen Opel

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;

Використання: ./deleteСтарий "ім'я відра" "30 днів", наприклад. s3: // dir1 / dir2 / dir3 / bucketname = "dir1 / dir2 / dir3 /" ніколи не

Що робити, якщо ім'я файлу має простір, і мені потрібно буде надрукувати всі стовпці після цього, Video 1280x720 (2)13201781136780000000.mp4просто дає відео не інше.
Рамратан Гупта

Я отримав рішення від 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.