Supprimer automatiquement les anciens éléments du compartiment s3

15

Existe-t-il un moyen simple de configurer un compartiment dans s3 pour supprimer automatiquement les fichiers de plus de x jours?

jdp
la source

Réponses:

19

Amazon a entre-temps introduit les cycles de vie S3 (voir le blog d'introduction Amazon S3 - Expiration d'objet ), où vous pouvez spécifier un âge maximum en jours pour les objets dans un compartiment - voir Expiration d'objet pour plus de détails sur son utilisation via l'API S3 ou la gestion AWS Console.

Akshat
la source
+1 pour avoir fourni une mise à jour concernant ces informations obsolètes, merci!
Steffen Opel
3

Vous pouvez utiliser s3cmd pour écrire un script à exécuter dans votre compartiment et supprimer des fichiers en fonction d'une condition préalable.

Vous devrez écrire du code (bash, python) dessus.

Vous pouvez télécharger s3cmd sur http://s3tools.org/s3cmd

lynxman
la source
3

script shell pour supprimer les anciens compartiments à l'aide de la
source de l' utilitaire 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
la source
Utilisation: ./deleteOld "bucketname" "30 jours" par exemple. s3: // dir1 / dir2 / dir3 / bucketname = "dir1 / dir2 / dir3 /" ne jamais ignorer le dernier "/"
que faire si le nom du fichier a de l'espace et que j'ai besoin d'imprimer toutes les colonnes après cela, Video 1280x720 (2)13201781136780000000.mp4donne juste la vidéo pas le reste.
Ramratan Gupta
J'ai obtenu la solution de stackoverflow.com/a/9745022/1589444
Ramratan Gupta
1

Non, S3 n'est qu'un magasin de données. Vous devrez utiliser un client externe pour supprimer périodiquement les anciens fichiers.

Martijn Heemels
la source
1
Ah, ça rend les choses beaucoup plus faciles. Bien que, pour mes sauvegardes, je préfère toujours effectuer la suppression de mon script, pour m'assurer que les sauvegardes plus anciennes ne sont purgées que lorsqu'une nouvelle a été effectuée avec succès.
Martijn Heemels
1

J'ai trouvé une solution beaucoup plus rapide pour supprimer des lots à l'aide d'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";
}

Référence pour la suppression par lots /programming//a/41734090/1589444

Référence pour la gestion des fichiers avec de l'espace avec un cas de réussite à 100% /programming/36813327/how-to-display-only-files-from-aws-s3-ls-command

Ramratan Gupta
la source