Secara otomatis menghapus item lama dari ember s3

15

Apakah ada cara mudah untuk menyiapkan bucket di s3 untuk secara otomatis menghapus file yang lebih lama dari x hari?

jdp
sumber

Jawaban:

19

Sementara itu Amazon telah memperkenalkan siklus hidup S3 (lihat posting blog pengantar Amazon S3 - Object Expiration ), di mana Anda dapat menentukan usia maksimum dalam beberapa hari untuk objek dalam ember - lihat Expiration Obyek untuk detail tentang penggunaannya melalui API S3 atau Manajemen AWS Menghibur.

Akshat
sumber
+1 untuk memberikan pembaruan tentang informasi yang sudah usang ini, terima kasih!
Steffen Opel
3

Anda dapat menggunakan s3cmd untuk menulis skrip untuk dijalankan melalui bucket Anda dan menghapus file berdasarkan prasyarat.

Anda harus menulis beberapa kode (bash, python) di atasnya.

Anda dapat mengunduh s3cmd dari http://s3tools.org/s3cmd

lynxman
sumber
3

skrip shell untuk menghapus ember lama menggunakan
sumber utilitas 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;
Kushal
sumber
Penggunaan: ./deleteOld "bucketname" "30 days" misalnya. s3: // dir1 / dir2 / dir3 / bucketname = "dir1 / dir2 / dir3 /" jangan pernah abaikan yang terakhir "/"
bagaimana jika nama file memiliki ruang dan saya perlu mencetak semua kolom setelah itu, Video 1280x720 (2)13201781136780000000.mp4hanya memberikan Video bukan sisanya.
Ramratan Gupta
Saya mendapat solusi dari stackoverflow.com/a/9745022/1589444
Ramratan Gupta
1

Tidak, S3 hanya datastore. Anda harus menggunakan beberapa klien luar untuk menghapus file-file lama secara berkala.

Martijn Heemels
sumber
5
Ini tidak lagi benar: docs.amazonwebservices.com/AmazonS3/latest/UG/…
Tabitha
1
Ah, itu membuat segalanya lebih mudah. Meskipun, untuk cadangan saya, saya masih lebih suka melakukan penghapusan dari skrip saya, untuk memastikan cadangan yang lebih lama hanya dihapus ketika yang baru telah berhasil dibuat.
Martijn Heemels
1

Saya menemukan solusi hapus batch yang lebih cepat menggunakan 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";
}

Referensi untuk penghapusan batch /programming//a/41734090/1589444

Referensi untuk menangani file dengan spasi dengan case pass 100% /programming/36813327/how-to-display-only-files-from-aws-s3-ls-command

Ramratan Gupta
sumber