Есть ли простой способ настроить корзину в s3 для автоматического удаления файлов старше x дней?
Тем временем Amazon представила жизненные циклы S3 (см. Вводную запись в блоге Amazon S3 - Срок действия объекта), где можно указать максимальный возраст объектов в ведре в днях - см. Срок действия объекта для получения подробной информации о его использовании через S3 API или Консоль управления AWS.
Amazon теперь имеет возможность устанавливать политики корзины для автоматического истечения срока действия контента:
http://docs.amazonwebservices.com/AmazonS3/latest/UG/ObjectExpiration.html
Вы можете использовать s3cmd для написания сценария, который будет запускать вашу корзину и удалять файлы в соответствии с предварительным условием.
Вам нужно будет написать поверх него некоторый код (bash, python).
Вы можете скачать s3cmd из http://s3tools.org/s3cmd
сценарий оболочки для удаления старых корзин с помощью утилиты 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;
Я нашел гораздо более быстрое решение для удаления пакета с помощью 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";
}
Ссылка на пакетное удаление https://stackoverflow.com/a/41734090/1589444
Справочник по работе с файлом с пробелом при 100% проходе https://stackoverflow.com/questions/36813327/how-to-display-only-files-from-aws-s3-ls-command
Редактировать:
поскольку Amazon представил истечение срока действия объекта s3 27 декабря 2011 г. этот ответ больше не действителен.
Нет, S3 - это просто хранилище данных. Вам нужно будет использовать какой-то внешний клиент, чтобы периодически удалять старые файлы.