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?

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.


+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


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;

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


1

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



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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.