Eliminar automáticamente elementos antiguos del cubo s3

15

¿Hay una manera fácil de configurar un depósito en s3 para eliminar automáticamente archivos anteriores a x días?

jdp
fuente

Respuestas:

19

Mientras tanto, Amazon ha introducido los ciclos de vida de S3 (consulte la publicación de blog introductoria Amazon S3 - Expiración de objetos ), donde puede especificar una antigüedad máxima en días para los objetos en un depósito: consulte Expiración de objetos para obtener detalles sobre su uso a través de la API de S3 o la Administración de AWS Consola.

Akshat
fuente
+1 por proporcionar una actualización con respecto a esta información desactualizada, ¡gracias!
Steffen Opel
3

Puede usar s3cmd para escribir un script para ejecutar su bucket y eliminar archivos en función de una condición previa.

Tendrá que escribir un código (bash, python) encima.

Puede descargar s3cmd desde http://s3tools.org/s3cmd

Lynxman
fuente
3

script de shell para eliminar depósitos antiguos utilizando la
fuente de utilidad 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
fuente
Uso: ./deleteOld "bucketname" "30 días" ej. s3: // dir1 / dir2 / dir3 / bucketname = "dir1 / dir2 / dir3 /" nunca
¿Qué pasa si el nombre del archivo tiene espacio y necesito imprimir todas las columnas después de eso, Video 1280x720 (2)13201781136780000000.mp4solo le da al video no el resto?
Ramratan Gupta
Obtuve la
1

No, S3 es solo un almacén de datos. Tendrá que usar algún cliente externo para eliminar periódicamente los archivos antiguos.

Martijn Heemels
fuente
55
Esto ya no es cierto: docs.amazonwebservices.com/AmazonS3/latest/UG/…
Tabitha
1
Ah, eso hace las cosas mucho más fáciles. Aunque, para mis copias de seguridad, todavía prefiero realizar la eliminación de mi script, para asegurarme de que las copias de seguridad más antiguas solo se eliminen cuando una nueva se haya realizado con éxito.
Martijn Heemels
1

Encontré una solución mucho más rápida para eliminar lotes usando 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";
}

Referencia para la eliminación por lotes /programming//a/41734090/1589444

Referencia para manejar archivos con espacio con 100% de casos de paso /programming/36813327/how-to-display-only-files-from-aws-s3-ls-command

Ramratan Gupta
fuente