Gostaria de representar graficamente o tamanho (em bytes e número de itens) de um bucket do Amazon S3 e estou procurando uma maneira eficiente de obter os dados.
As ferramentas s3cmd fornecem uma maneira de obter o tamanho total do arquivo usando s3cmd du s3://bucket_name
, mas estou preocupado com sua capacidade de dimensionar, pois parece que busca dados sobre cada arquivo e calcula sua própria soma. Como a Amazon cobra dos usuários em GB-Meses, parece estranho que eles não exponham esse valor diretamente.
Embora a API REST da Amazon retorne o número de itens em um bucket, s3cmd não parece expô-lo. Eu poderia fazer, s3cmd ls -r s3://bucket_name | wc -l
mas isso parece um hack.
A biblioteca Ruby AWS::S3 parecia promissora, mas fornece apenas o número de itens do bucket, não o tamanho total do bucket.
Alguém conhece outras ferramentas ou bibliotecas de linha de comando (prefira Perl, PHP, Python ou Ruby) que fornecem maneiras de obter esses dados?
Isso agora pode ser feito trivialmente apenas com o cliente de linha de comando oficial da AWS:
Documentação oficial: AWS CLI Command Reference (versão 2)
Isso também aceita prefixos de caminho se você não quiser contar o bucket inteiro:
A AWS CLI agora oferece suporte ao
--query
parâmetro que usa expressões JMESPath .Isso significa que você pode somar os valores de tamanho fornecidos
list-objects
usandosum(Contents[].Size)
e contar comolength(Contents[])
.Isso pode ser executado usando a AWS CLI oficial conforme abaixo e foi introduzido em fevereiro de 2014
Console AWS:
A partir de 28 de julho de 2015, você pode obter essas informações via CloudWatch . Se você quiser uma GUI, vá para o console do CloudWatch : (Escolha Região > ) Métricas > S3
Comando da AWS CLI:
Isso é muito mais rápido do que alguns dos outros comandos postados aqui, pois não consulta o tamanho de cada arquivo individualmente para calcular a soma.
Importante : Você deve especificar StorageType e BucketName no argumento de dimensões, caso contrário, você não obterá resultados. Tudo o que você precisa alterar é o
--start-date
,--end-time
, eValue=toukakoukan.com
.Aqui está um script bash que você pode usar para evitar ter que especificar
--start-date
e--end-time
manualmente.s3cmd pode fazer isso:
s3cmd du s3://bucket-name
Se você fizer download de um relatório de uso , poderá representar graficamente os valores diários do
TimedStorage-ByteHrs
campo.Se você quiser esse número em GiB, basta dividir por
1024 * 1024 * 1024 * 24
(isso é GiB-horas para um ciclo de 24 horas). Se você quiser o número em bytes, basta dividir por 24 e traçar o gráfico.Se você deseja obter o tamanho do Console AWS:
Por padrão, você deve ver as métricas do tamanho total do bucket na parte superior
Usando as ferramentas de linha de comando oficiais do AWS s3:
Este é um comando melhor, basta adicionar os seguintes 3 parâmetros
--summarize --human-readable --recursive
apósaws s3 ls
.--summarize
não é necessário embora dê um toque agradável no tamanho total.s4cmd é a maneira mais rápida que encontrei (um utilitário de linha de comando escrito em Python):
Agora, para calcular todo o tamanho do bucket usando vários threads:
Você pode usar o utilitário s3cmd, por exemplo:
Então, percorrendo a API e reproduzindo algumas mesmas consultas, o S3 produzirá todo o conteúdo de um bucket em uma solicitação e não precisará descer aos diretórios. Os resultados, então, exigem apenas a soma dos vários elementos XML, e não chamadas repetidas. Eu não tenho um balde de amostra que tenha milhares de itens, então não sei o quão bem ele será dimensionado, mas parece razoavelmente simples.