一千萬個為什麽

搜索

查看所有AWS S3存儲桶並列出使用的每個存儲桶存儲



我有多個 AWS 帳戶,我需要列出每個帳戶的所有 S3 存儲桶,然後查看每個存儲桶總大小。

目前,我只能查看單個 S3 存儲桶的存儲空間大小:

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

轉載註明原文: 查看所有AWS S3存儲桶並列出使用的每個存儲桶存儲

一共有 3 個回答:

你將不得不寫一個腳本來做到這一點,除非有一個工具可以做到這一點,我找不到。

如果您使用多個aws賬戶,則需要在賬戶之間切換以獲取存儲桶大小。

要獲得所有的桶和它們的總大小,你可以使用' aws s3api '。使用 list-buckets ,您可以在一個帳戶中獲取所有存儲桶,然後您將能夠列出其大小並嘗試下一個帳戶。

第1項決議

所以我用下面的腳本解決了這個問題。我最初發布了這個問題,以防萬一有一種我不知道的簡單方法。

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

決議2

在AWS控制臺中使用 CloudWatch 中的儀表板

然後您可以簡單地指定所有S3存儲桶並添加數字統計信息以顯示存儲大小指標。

這不會花費你大量的API調用,並且可以顯著加快速度,這取決於s3桶的大小(需要相當長的時間才能在非常大的桶上獲得大小)。

判決</強>

Creating the Dashboard (決議2 ) on each AWS account was the most efficient option for me cause it is way quicker for me to log in and grab the metrics manually from each AWS account than to wait for the scripts API calls to finish. :(

您需要編寫一個腳本來解析和查詢這些數據,因為據我所知,沒有一個工具或cli函數可以執行此操作。幸運的是,您可以使用CLI收集所有這些信息。

  1. List and parse all of the accounts in your org.

    aws organizations list-accounts
    
  2. For each account, list and parse all of the buckets.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. Finally, get the size of each bucket within each account. You can use the same cli command you were before, but be warned that you are going to be listing the individual size of each item within the bucket. You can also use this cli command to get bucket size.

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