AWS S3: como faço para ver quanto espaço em disco está usando


113

Eu tenho uma conta AWS. Estou usando o S3 para armazenar backups de servidores diferentes. A questão é: há alguma informação no console da AWS sobre quanto espaço em disco está em uso na minha nuvem S3?


1
Você tem que pegar todos os objetos e então somar todos os tamanhos dos arquivos. Você não pode fazer isso em uma única operação.
Layke

É estranho que não haja uma solução real para esse problema. Examinar todos os itens e calcular não é uma solução se você tem 10s de milhões de arquivos! Na IU s3 da AWS, você pode ver facilmente o uso em Gerenciamento -> Métricas. Por que não há uma maneira de obter isso na linha de comando?
Sarang

Respostas:


117

Yippe - uma atualização para AWS CLI permite que você ls recursivamente por meio de buckets ...

aws s3 ls s3://<bucketname> --recursive  | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'

print total / 1024/1024/1024 * .03 dá uma boa estimativa para o uso de $ se você estiver abaixo de 1 TB. @cudds awesomeness - muito obrigado !!!
chrislovecnm

4
Você não precisa da parte grep se for um único balde.
jpbochi,

7
O AWS Cloudwatch agora tem uma métrica para o tamanho do intervalo e o número de objetos que é atualizada diariamente. Estava na hora! aws.amazon.com/blogs/aws/…
cudds

3
Exemplo aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2015-07-15T10:00:00 --end-time 2015-07-31T01:00:00 --period 86400 --statistics Average --region eu-west-1 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=toukakoukan.com Name=StorageType,Value=StandardStorage Importante: Você deve especificar StorageType e BucketName no argumento dimensões, caso contrário, você não obterá resultados.
Sam Martin

@SamMartin o que StorageType precisa ser? Além disso, esta resposta leva muito tempo para calcular para intervalos maiores que 100 GB
Vivek Katial

104

Não tenho certeza de quando isso foi adicionado ao AWSCLI, visto que a pergunta original foi há 3 anos, mas a ferramenta de linha de comando fornece um bom resumo executando:

aws s3 ls s3://mybucket --recursive --human-readable --summarize

4
A sua e a de Christopher são de longe as melhores respostas.
Michael Ahlers

2
Solução muito mais simples do que a resposta aceita. Obrigado!
Adrian Macneil

1
isso não mostra o tamanho real com as versões. Existe uma maneira de verificar o tamanho total do balde s3 com todas as versões?
Shanika Ediriweera

1
Imprima o tamanho total de cada um de seus baldes:for b in $(aws s3 ls | awk '{ print $NF }'); do printf "$b "; aws s3 ls s3://$b --recursive --human-readable --summarize | tail -1; done
Matt White

69

Para descobrir o tamanho do intervalo S3 usando o Console AWS:

  1. Clique no nome do bucket S3
  2. Selecione a guia "Gerenciamento"
  3. Clique no botão de navegação "Métricas"
  4. Por padrão, você deve ver a métrica de armazenamento do intervalo

Espero que isto ajude.


3
Isso funciona mais rápido caso seu intervalo tenha TB de dados. As respostas aceitas levam muito tempo para calcular todos os objetos nessa escala.
sokras 01 de

Observe também que isso irá capturar uploads incompletos suspensos, enquanto as lssoluções baseadas em -não fazem isso.
David Moles de

a maneira mais rápida de fazer isso é esta resposta
Mohammad Zekrallah

36

s3cmd pode mostrar isso executando s3cmd du, opcionalmente, passando o nome do intervalo como um argumento.


1
Para sua informação - eu tentei isso e a versão aws cli em cudds responde. Ambos funcionam bem, mas o s3cmd foi significativamente mais lento nos casos que experimentei desde a versão 1.5.0-rc1.
DougW

@DougW: Obrigado, informação útil. O AWS CLI 1.0.0 foi lançado em setembro de 2013 , então não existia no momento em que escrevi minha resposta.
markusk

s3cmd não suporta hashing AWS4, portanto não funcionará com nenhuma nova região, incluindo a região da UE "eu-central-1"
Koen.

@Koen .: Obrigado, não tinha conhecimento disso. Parece que o mantenedor do s3cmd está pensando em adicionar suporte para AWS4: github.com/s3tools/s3cmd/issues/402
markusk

@Koen .: s3cmd agora suporta hashing AWS4 a partir de 1.5.0, que foi lançado em 12/01/2015. Consulte s3tools.org/news .
markusk

28

O AWS CLI agora oferece suporte ao --queryparâmetro que leva um JMESPath expressões .

Isso significa que você pode somar os valores de tamanho dados list-objectsusando sum(Contents[].Size)e contar comolength(Contents[]) .

Isso pode ser executado usando o AWS CLI oficial conforme abaixo e foi introduzido em fevereiro de 2014

 aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"

Eu tive que usar aspas duplas em torno da string de consulta na linha de comando do Windows. Mas funciona como um campeão.
Travis Steel

Cuidado: se o balde estiver vazio, o comando falhará com o seguinte erro: In function sum(), invalid type for value: None, expected one of: ['array-number'], received: "null"Caso contrário, a consulta funciona muito bem!
mechatroner

7

No linux box que tem python(com o pipinstalador), grepe awk, instale AWS CLI (ferramentas de linha de comando para EC2, S3 e muitos outros serviços)

sudo pip install awscli

em seguida, crie um .awssecretarquivo em sua pasta de início com o conteúdo abaixo (ajuste a chave, o segredo e a região conforme necessário):

[default]
aws_access_key_id=<YOUR_KEY_HERE>
aws_secret_access_key=<YOUR_SECRET_KEY_HERE>
region=<AWS_REGION>

Torne este arquivo de leitura e gravação apenas para o seu usuário:

sudo chmod 600 .awssecret

e exporte para o seu ambiente

 export AWS_CONFIG_FILE=/home/<your_name>/.awssecret

em seguida, execute no terminal (este é um comando de linha única, separado por \para facilitar a leitura aqui):

aws s3 ls s3://<bucket_name>/foo/bar | \
grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | \
awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'
  • a awsparte lista o intervalo (ou, opcionalmente, uma 'subpasta')
  • a grepparte remove (usando -v) as linhas que correspondem à Expressão regular (usando -E). ^$é para linha em branco, --é para linhas separadoras na saída deaws s3 ls
  • o último awkbasta adicionar à total3ª coluna da saída resultante (o tamanho em KB) e exibi-lo no final

OBSERVAÇÃO, este comando funciona para o intervalo ou 'pasta' atual, não recursivamente


7

O Cloud watch também permite que você crie métricas para seu bucket S3. Ele mostra as métricas por tamanho e contagem de objetos. Serviços> Ferramentas de gerenciamento> Cloud watch. Escolha a região onde está o seu bucket S3 e as métricas de tamanho e contagem de objeto estariam entre as métricas disponíveis.


6

Consulte /server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket

Respondido por Vic ...

<?php
if (!class_exists('S3')) require_once 'S3.php';

// Instantiate the class
$s3 = new S3('accessKeyId', 'secretAccessKey');
S3::$useSSL = false;

// List your buckets:
echo "S3::listBuckets(): ";
echo '<pre>' . print_r($s3->listBuckets(), 1). '</pre>';

$totalSize = 0;
$objects = $s3->getBucket('name-of-your-bucket');
foreach ($objects as $name => $val) {
    // If you want to get the size of a particular directory, you can do
    // only that.
    // if (strpos($name, 'directory/sub-directory') !== false)
    $totalSize += $val['size'];
}

echo ($totalSize / 1024 / 1024 / 1024) . ' GB';
?>

Você sabe se o gigabyte neste caso é 1024 3 ou 1000 3? Estou tendo dificuldade em encontrar uma declaração S3 definitiva.
dfrankow de

@dfrankow A linha echo ($totalSize / 1024 / 1024 / 1024) . ' GB';está bem no final do código-fonte.
MJD

@MJD Não me lembro o que meu pensamento estava aqui. Ele estava perguntando sobre o uso de s3cmd ou S3 da palavra "gigabyte", não sobre esse código PHP.
dfrankow

5

Além da resposta de Christopher.

Se você precisar contar o tamanho total do intervalo com versão, use:

aws s3api list-object-versions --bucket BUCKETNAME --output json --query "[sum(Versions[].Size)]"

Ele conta as versões mais recentes e arquivadas.



1

O console da AWS não mostrará isso, mas você pode usar o Bucket Explorer ou o Cloudberry Explorer para obter o tamanho total de um bucket. Ambos têm versões gratuitas disponíveis.

Observação: esses produtos ainda precisam obter o tamanho de cada objeto individual, por isso pode demorar muito para baldes com muitos objetos.


No entanto, só consigo ver um trialware. Essa oferta foi removida?
Trefex

1

Com base na resposta de @cudds:

function s3size()
{
    for path in $*; do
        size=$(aws s3 ls "s3://$path" --recursive | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{printf "%.2fGb\n", (total/1024/1024/1024)}')
        echo "[s3://$path]=[$size]"
    done
}

...

$ s3size bucket-a bucket-b/dir
[s3://bucket-a]=[24.04Gb]
[s3://bucket-b/dir]=[26.69Gb]

Além disso, o Cyberduck permite convenientemente o cálculo do tamanho de um balde ou pasta.


1

A resposta de Mini John funcionou totalmente para mim! Incrível ... tinha que adicionar

--region eu-west-1 

da Europa embora


1

Esta é uma pergunta antiga, mas como estava procurando a resposta, encontrei-a. Algumas das respostas me fizeram lembrar que uso o S3 Browser para gerenciar dados. Você pode clicar em um balde e propriedades de hit e mostra o total. Bem simples. Eu recomendo fortemente o navegador: https://s3browser.com/default.aspx?v=6-1-1&fam=x64


0

Bem, você também pode fazer isso por meio de um cliente S3 se preferir uma interface de usuário amigável.

Eu uso o CrossFTP , que é gratuito e multiplataforma, e aí você pode clicar com o botão direito no diretório da pasta -> selecionar "Propriedades ..." -> clicar no botão "Calcular" ao lado de Tamanho e voila.


0

s3admin é um aplicativo de código aberto (IU) que permite navegar nos baldes, calcular o tamanho total e mostrar os arquivos maiores / menores. Ele é personalizado para ter uma visão geral rápida de seus Buckets e seu uso.


0

Você perguntou: informações no console da AWS sobre quanto espaço em disco está usando na minha nuvem S3 ?

Vou ao Painel de Faturamento e verifico o uso do S3 na fatura atual .

Eles fornecem a informação - MTD - em Gb para 6 casas decimais, IOW, para o nível de Kb.

Ele é dividido por região, mas adicioná-los (supondo que você use mais de uma região) é bastante fácil.

BTW: você pode precisar de permissões específicas do IAM para obter as informações de faturamento.


-2

Eu uso o Cloud Turtle para obter o tamanho de baldes individuais. Se o tamanho do balde exceder> 100 Gb, levará algum tempo para exibir o tamanho. Cloud Turtle é um freeware.


8
Tenha cuidado com este software. Ele instala extensões extras do Chrome e parece ser bastante spam.
styks
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.