Ver todos los depósitos de AWS S3 y enumerar cada almacenamiento de depósitos utilizado

11

Tengo varias cuentas de AWS y necesito enumerar todos los depósitos de S3 por cuenta y luego ver el tamaño total de cada depósito.

Actualmente, solo puedo ver el tamaño de almacenamiento de un solo cubo S3 con:

aws s3 ls s3://mybucket --recursive --human-readable --summarize
Kyle Steenkamp
fuente
S3 Select se lanzó hace unos días en re: invent 2017 twitch.tv/videos/206752912
Abdennour TOUMI
Es posible que desee probar este código que escribí para lograr lo mismo: github.com/insperitas/s3-data
jimmy978654321

Respuestas:

11

Resolución 1

Así que resolví esto con el siguiente script. Originalmente publiqué la pregunta por si había una manera más fácil de la que no estaba al tanto.

#!/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

Resolución 2

Uso de paneles en CloudWatch en la consola de AWS.

Luego, simplemente puede especificar todos los depósitos de S3 y agregar las estadísticas de números para mostrar las métricas de tamaño de almacenamiento.

Esto no le costará muchas llamadas a la API y puede ser significativamente más rápido dependiendo del tamaño de los cubos s3 (lleva bastante tiempo obtener el tamaño en cubos muy grandes).

Veredicto

Crear el Tablero ( Resolución 2 ) en cada cuenta de AWS fue la opción más eficiente para mí porque es mucho más rápido para iniciar sesión y tomar las métricas manualmente de cada cuenta de AWS que esperar a que finalicen las llamadas a la API de scripts. :(

Kyle Steenkamp
fuente
¿Por qué | awk END'{print}'?
Tensibai
1
El uso de la opción recursiva muestra el tamaño de cada carpeta y archivo y solo necesito la salida del tamaño total del depósito.
Kyle Steenkamp
Debe seleccionar un período de '1 día' o más para que el tablero muestre cualquier cosa
Jeremy Leipzig
2
Tenga en cuenta que la solución propuesta en la Resolución 2 incrementa su costo de Cloudwatch ya que los paneles tienen un costo de $ 3 cada uno en este momento. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio
¿Qué significa el [@]en "${buckets[@]}"?
Joe
3

Deberá escribir un script que analice y consulte estos datos porque, hasta donde yo sé, no existe una herramienta o función cli que realice esto. Afortunadamente, puede recopilar toda esta información con la CLI.

  1. Enumere y analice todas las cuentas en su organización.

    aws organizations list-accounts
    
  2. Para cada cuenta, enumere y analice todos los cubos.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. Finalmente, obtenga el tamaño de cada cubo dentro de cada cuenta. Puedes usar el mismo comando cli que eras antes, pero ten en cuenta que vas a enumerar el tamaño individual de cada elemento dentro del cubo. También puede usar este comando cli para obtener el tamaño del depósito.

    aws s3api list-objects --bucket BUCKETNAME --output json --query "
    [sum(Contents[].Size), length(Contents[])]"
    
PrestonM
fuente
1
1. no enumera la información de perfil de la cuenta de AWS. No tuve tiempo de regexear esto desde el archivo de configuración de aws donde se almacena esta información, así que simplemente codifiqué los valores en el script que publiqué a continuación
Kyle Steenkamp
2

Tendrás que escribir un script para hacer esto a menos que haya una herramienta para hacerlo que no pueda encontrar.

Si está trabajando con varias cuentas aws, deberá cambiar entre cuentas para obtener los tamaños de los depósitos.

Para obtener todos los cubos y su tamaño total, puede usar ' aws s3api '. Utilizando list-bucketspuede obtener todos los cubos en una cuenta y luego podrá enumerar sus tamaños y probar la siguiente cuenta.

Briansbum
fuente
1
Escribí un script de Python con boto3 para hacer esto: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (nota: usa GetMetricStatistics de CloudWatch para extraer los tamaños de cubo de manera eficiente / sin sumar todos los tamaños de objeto en un cubo)
Reid
1

Ninguno de estos muestra el tamaño del depósito si el Control de versiones está activado y se han "eliminado" cantidades masivas de datos. En la consola S3 GUI, la pestaña Métricas muestra lo que se le factura.

Eliminó el siguiente comando de un script que se encuentra en /server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket . Funciona bien en Windows. Sustituto yourregiony 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

Esto proporciona el tamaño promedio en bytes durante los días delimitados por las horas de inicio y finalización. El resultado puede sorprenderle si su depósito tiene el Control de versiones habilitado (activo) y cree que ha "eliminado" cantidades masivas de datos.

Para limpiar los depósitos habilitados para el control de versiones, debe establecer una regla de LifeCycle. Puede elegir eliminar permanentemente las versiones anteriores. Puede omitir las casillas de verificación en el paso Transiciones.

Novato
fuente