Alte Gegenstände automatisch aus dem s3-Eimer löschen


15

Gibt es eine einfache Möglichkeit, in s3 einen Bucket einzurichten, um Dateien, die älter als x Tage sind, automatisch zu löschen?

Antworten:



19

Inzwischen hat Amazon S3-Lebenszyklen eingeführt (siehe den einleitenden Blog-Beitrag Amazon S3 - Objektablauf ), in dem Sie ein maximales Alter in Tagen für Objekte in einem Bucket festlegen können. Weitere Informationen zur Verwendung über die S3-API oder das AWS-Management finden Sie unter Objektablauf Konsole.


+1 für die Bereitstellung eines Updates zu diesen veralteten Informationen, danke!
Steffen Opel

3

Sie können s3cmd verwenden, um ein Skript zu schreiben, das Ihren Bucket durchläuft und Dateien basierend auf einer Vorbedingung löscht.

Sie müssen einen Code (Bash, Python) darüber schreiben.

Sie können s3cmd von http://s3tools.org/s3cmd herunterladen


3

Shell-Skript zum Löschen alter Buckets mit dem Dienstprogramm 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;

Verwendung: ./deleteOld "Bucketname" "30 Tage" zB. s3: // dir1 / dir2 / dir3 / bucketname = "dir1 / dir2 / dir3 /" ignoriere niemals das letzte "/"

was ist, wenn der Dateiname Platz hat und ich danach alle Spalten drucken muss, Video 1280x720 (2)13201781136780000000.mp4gibt nur Video nicht den Rest.
Ramratan Gupta


1

Nein, S3 ist nur ein Datenspeicher. Sie müssen einen externen Client verwenden, um die alten Dateien regelmäßig zu löschen.



1
Ah, das macht die Sache viel einfacher. Obwohl ich für meine Backups immer noch das Löschen aus meinem Skript bevorzuge, stelle ich sicher, dass ältere Backups nur gelöscht werden, wenn ein neues erfolgreich erstellt wurde.
Martijn Heemels

1

Ich habe eine viel schnellere Lösung zum Löschen von Batches mit AWS CLI gefunden

#!/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";
}

Referenz für das Löschen von Stapeln /programming//a/41734090/1589444

Referenz für die Behandlung von Dateien mit Speicherplatz mit 100% Pass-Fall /programming/36813327/how-to-display-only-files-from-aws-s3-ls-command

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.