Elimina automaticamente itens antigos do s3 bucket

12

Existe uma maneira fácil de configurar um intervalo no s3 para excluir automaticamente os arquivos com mais de x dias?

    
por jdp 12.01.2011 / 20:38

6 respostas

8

A Amazon agora pode definir políticas de buckets para expirar o conteúdo automaticamente:

link

    
por 15.10.2012 / 23:30
18

A Amazon introduziu ciclos de vida S3 (veja a postagem introdutória do blog Amazon S3 - Expiração de Objetos , onde você pode especificar uma idade máxima em dias para objetos em um bucket - veja Expiração de Objetos para obter detalhes sobre seu uso por meio da API do S3 ou do AWS Management Console.

    
por 18.02.2012 / 10:58
3

Você pode usar o s3cmd para escrever um script para executar o seu intervalo e excluir arquivos com base em uma condição prévia.

Você precisará escrever algum código (bash, python) sobre ele.

Você pode fazer o download do s3cmd do link

    
por 13.01.2011 / 00:39
2

script de shell para excluir blocos antigos usando o utilitário s3cmd
fonte : link

#!/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;
    
por 14.04.2015 / 08:55
1

Não, o S3 é apenas um armazenamento de dados. Você precisará usar algum cliente externo para excluir periodicamente os arquivos antigos.

    
por 12.01.2011 / 22:02
1

Encontrei uma solução muito mais rápida para excluir lote usando o 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";
}

Reference for batch delete https://stackoverflow.com/a/41734090/1589444

Reference for handling file with space with 100% pass case https://stackoverflow.com/questions/36813327/how-to-display-only-files-from-aws-s3-ls-command

    
por 20.09.2017 / 11:24

Tags