Afficher tous les compartiments AWS S3 et répertorier chaque stockage de compartiments utilisé

11

J'ai plusieurs comptes AWS et je dois répertorier tous les compartiments S3 par compte, puis afficher la taille totale de chaque compartiment.

Actuellement, je ne peux voir que la taille de stockage d'un seul compartiment S3 avec:

aws s3 ls s3://mybucket --recursive --human-readable --summarize
Kyle Steenkamp
la source
S3 Select est sorti il ​​y a quelques jours dans re: invent 2017 twitch.tv/videos/206752912
Abdennour TOUMI
Vous voudrez peut-être essayer ce code que j'ai écrit pour réaliser la même chose moi-même: github.com/insperitas/s3-data
jimmy978654321

Réponses:

11

Résolution 1

J'ai donc résolu cela avec le script suivant. J'ai initialement posté la question juste au cas où il y aurait un moyen plus simple dont je n'étais pas au courant.

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

Résolution 2

Utilisation des tableaux de bord dans CloudWatch dans la console AWS.

Vous pouvez ensuite simplement spécifier tous les compartiments S3 et ajouter les statistiques des nombres pour afficher les métriques de taille de stockage.

Cela ne vous coûtera pas beaucoup d'appels API et peut être considérablement plus rapide en fonction de la taille des compartiments s3 (cela prend un certain temps pour obtenir la taille sur de très grands compartiments).

Verdict

La création du tableau de bord ( résolution 2 ) sur chaque compte AWS a été l'option la plus efficace pour moi, car il est beaucoup plus rapide pour moi de me connecter et de saisir manuellement les métriques de chaque compte AWS que d'attendre la fin des appels d'API de scripts. :(

Kyle Steenkamp
la source
Pourquoi | awk END'{print}'?
Tensibai
1
L'utilisation de l'option récursive montre la taille de chaque dossier et fichier et je n'ai besoin que de la sortie de la taille totale du compartiment.
Kyle Steenkamp
Vous devez sélectionner une période d'un jour ou plus pour que le tableau de bord affiche quoi que ce soit
Jeremy Leipzig
2
Sachez que la solution proposée dans la résolution 2 augmente votre coût Cloudwatch, car les tableaux de bord ont chacun un coût de 3 $ pour le moment. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio
Que signifie l' [@]in "${buckets[@]}"?
Joe
3

Vous devrez écrire un script qui analyse et interroge ces données car, à ma connaissance, il n'y a pas d'outil ni de fonction cli qui effectue cela. Heureusement, vous pouvez rassembler toutes ces informations avec la CLI.

  1. Répertoriez et analysez tous les comptes de votre organisation.

    aws organizations list-accounts
    
  2. Pour chaque compte, répertoriez et analysez tous les compartiments.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. Enfin, obtenez la taille de chaque compartiment au sein de chaque compte. Vous pouvez utiliser la même commande cli que vous étiez avant, mais soyez averti que vous allez répertorier la taille individuelle de chaque élément dans le compartiment. Vous pouvez également utiliser cette commande cli pour obtenir la taille du compartiment.

    aws s3api list-objects --bucket BUCKETNAME --output json --query "
    [sum(Contents[].Size), length(Contents[])]"
    
PrestonM
la source
1
1. ne répertorie pas les informations de profil du compte AWS. Je n'ai pas eu le temps de regex cela à partir du fichier de configuration aws où ces informations sont stockées, j'ai donc codé en dur les valeurs dans le script que j'ai publié ci
Kyle Steenkamp
2

Vous devrez écrire un script pour ce faire, sauf s'il existe un outil pour le faire que je ne trouve pas.

Si vous travaillez avec plusieurs comptes aws, vous devrez basculer entre les comptes pour obtenir les tailles de compartiment.

Pour obtenir tous les seaux et leur taille totale, vous pouvez utiliser ' aws s3api '. En utilisant, list-bucketsvous pouvez obtenir tous les compartiments dans un seul compte, puis vous pourrez répertorier leurs tailles et essayer le compte suivant.

Briansbum
la source
1
J'ai écrit un script Python avec boto3 pour ce faire: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (note: utilise GetMetricStatistics de CloudWatch pour tirer les tailles de seau efficacement / sans additionner toutes les tailles d'objets dans un seau)
Reid
1

Aucun de ceux-ci n'affiche la taille du compartiment si le contrôle de version est activé et que des quantités massives de données ont été "supprimées". Dans la console de l'interface graphique S3, l'onglet Métriques affiche ce pour quoi vous êtes facturé.

Supprimé la commande suivante d'un script trouvé sur /server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket . Cela fonctionne bien sous Windows. Suppléant yourregionet 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

Cela donne la taille moyenne en octets sur les jours délimités par les heures de début et de fin. Le résultat peut vous choquer si le contrôle de version est activé (actif) dans votre compartiment et que vous pensez avoir "supprimé" d'énormes quantités de données.

Pour nettoyer les compartiments prenant en charge la gestion des versions, vous devez définir une règle LifeCycle. Vous pouvez choisir de supprimer définitivement les versions précédentes. Vous pouvez omettre les cases à cocher à l'étape Transitions.

Débutant
la source