Visualize todos os buckets do AWS S3 e liste cada armazenamento de buckets usado

11

Eu tenho várias contas da AWS e preciso listar todos os buckets do S3 por conta e exibir o tamanho total de cada um deles.

Atualmente, só posso ver o tamanho do armazenamento de um único bucket S3 com:

aws s3 ls s3://mybucket --recursive --human-readable --summarize
Kyle Steenkamp
fonte
S3 Select foi lançado há alguns dias em re: invent 2017 twitch.tv/videos/206752912
Abdennour TOUMI
Você pode tentar esse código que escrevi para obter a mesma coisa: github.com/insperitas/s3-data
jimmy978654321

Respostas:

11

Resolução 1

Então eu resolvi isso com o seguinte script. Originalmente, postei a pergunta para o caso de haver uma maneira mais fácil da qual eu não estava ciente.

#!/bin/bash
aws_profile=('profile1' 'profile2' 'profile3');

#loop AWS profiles
for i in "${aws_profile[@]}"; do
  echo "${i}"
  buckets=($(aws --profile "${i}" --region your_region s3 ls s3:// --recursive | awk '{print $3}'))

  #loop S3 buckets
  for j in "${buckets[@]}"; do
  echo "${j}"
  aws --profile "${i}" --region your_region s3 ls s3://"${j}" --recursive --human-readable --summarize | awk END'{print}'
  done

done

Resolução 2

Usando painéis no CloudWatch no console da AWS.

Você pode simplesmente especificar todos os buckets S3 e adicionar as estatísticas de números para mostrar as métricas de tamanho de armazenamento.

Isso não lhe custará muitas chamadas de API e pode ser significativamente mais rápido, dependendo do tamanho dos buckets s3 (leva algum tempo para obter o tamanho em buckets muito grandes).

Veredito

Criar o painel ( resolução 2 ) em cada conta da AWS foi a opção mais eficiente para mim, pois é muito mais rápido fazer login e capturar as métricas manualmente de cada conta da AWS do que aguardar o término das chamadas da API de scripts. :(

Kyle Steenkamp
fonte
Por que | awk END'{print}'?
Tensibai 4/17/17
11
O uso da opção recursiva mostra o tamanho de cada pasta e arquivo e eu preciso apenas da saída do tamanho total do balde.
precisa
Você precisa selecionar um período de '1 dia' ou mais para que o painel exiba qualquer coisa.
Jeremy Leipzig
2
Lembre-se de que a solução proposta na Resolução 2 aumenta o custo do seu Cloudwatch, pois os painéis têm um custo de US $ 3 cada no momento. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio 6/19
O que significa [@]in "${buckets[@]}"?
Joe
3

Você precisará escrever um script que analise e consulte esses dados porque, até onde eu saiba, não há uma ferramenta ou função CLI que faça isso. Felizmente, você pode reunir todas essas informações com a CLI.

  1. Liste e analise todas as contas em sua organização.

    aws organizations list-accounts
    
  2. Para cada conta, liste e analise todos os blocos.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. Por fim, obtenha o tamanho de cada bloco em cada conta. Você pode usar o mesmo comando cli de antes, mas lembre-se de listar o tamanho individual de cada item no balde. Você também pode usar este comando cli para obter o tamanho do balde.

    aws s3api list-objects --bucket BUCKETNAME --output json --query "
    [sum(Contents[].Size), length(Contents[])]"
    
PrestonM
fonte
11
1. não lista as informações de perfil da conta da AWS. Eu não tinha tempo para regex este a partir do arquivo AWS configuração em que esta informação é armazenada então eu só codificado os valores no script eu postei abaixo
Kyle Steenkamp
2

Você terá que escrever um script para fazer isso, a menos que haja uma ferramenta que eu não consiga encontrar.

Se você estiver trabalhando com várias contas do aws, precisará alternar entre as contas para obter os tamanhos de bucket.

Para obter todos os buckets e seu tamanho total, você pode usar ' aws s3api '. Com list-bucketsvocê, você pode obter todos os blocos em uma conta e, em seguida, poderá listar seus tamanhos e tentar a próxima conta.

Briansbum
fonte
11
Eu escrevi um script Python com boto3 para fazer isso: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (nota: usa GetMetricStatistics do CloudWatch para puxar os tamanhos de bucket de maneira eficiente / sem somar todos os tamanhos de objeto em um bucket)
Reid
1

Nenhuma delas mostra o tamanho do bucket se o Versioning estiver ativado e grandes quantidades de dados foram "excluídas". No console da GUI do S3, a guia Métricas mostra o que você está sendo cobrado.

Raspou o seguinte comando de um script encontrado em /server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket . Funciona bem no Windows. Substituto yourregione yourbucketname:

aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2019-05-09T00:01:00Z --end-time 2019-05-11T23:59:00Z --period 86400 --statistics Average --region yourregion --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=yourbucketname Name=StorageType,Value=StandardStorage

Isso fornece o tamanho médio em bytes nos dias delimitados pelos horários de início e término. O resultado pode chocá-lo se o seu bucket estiver com o Versioning ativado (ativo) e você achar que "excluiu" grandes quantidades de dados.

Para limpar os buckets habilitados para controle de versão, você deve definir uma regra do LifeCycle. Você pode optar por excluir permanentemente as versões anteriores. Você pode omitir as caixas de seleção na etapa Transições.

Novato
fonte