2012-01-23 471 views
65

我有AWS賬戶。我使用S3來存儲來自不同服務器的備份。問題是AWS控制檯中有關於我的S3雲上有多少磁盤空間正在使用的信息?AWS S3:我如何查看使用多少磁盤空間

感謝

+1

你必須得到所有的對象,然後總結所有的文件大小。你不能在一個單一的操作。 – Layke

回答

72

Yippe - 更新到AWS CLI允許您通過遞歸最小二乘桶...

aws s3 ls s3://<bucketname> --recursive | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}' 
+0

打印總數/ 1024/1024/1024 * .03對於$使用情況給出了一個很好的估計,如果你在1TB以下。 @cudds超棒 - 謝謝! – chrislovecnm

+2

如果你只有一個桶,你不需要grep部分。 – jpbochi

+4

AWS Cloudwatch現在具有每日更新的存儲桶大小和對象數的度量標準。關於時間! https://aws.amazon.com/blogs/aws/amazon-s3-update-delete-notifications-better-filters-bucket-metrics/ – cudds

6

https://serverfault.com/questions/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket

維克回答...

<?php 
if (!class_exists('S3')) require_once 'S3.php'; 

// Instantiate the class 
$s3 = new S3('accessKeyId', 'secretAccessKey'); 
S3::$useSSL = false; 

// List your buckets: 
echo "S3::listBuckets(): "; 
echo '<pre>' . print_r($s3->listBuckets(), 1). '</pre>'; 

$totalSize = 0; 
$objects = $s3->getBucket('name-of-your-bucket'); 
foreach ($objects as $name => $val) { 
    // If you want to get the size of a particular directory, you can do 
    // only that. 
    // if (strpos($name, 'directory/sub-directory') !== false) 
    $totalSize += $val['size']; 
} 

echo ($totalSize/1024/1024/1024) . ' GB'; 
?> 
+0

你知道在這種情況下,技嘉是1024 ** 3還是1000 ** 3?我很難找到最終的S3聲明。 – dfrankow

+0

@dfrankow echo'($ totalSize/1024/1024/1024)。 'GB';'就在源代碼的底部。 – MJD

+0

@MJD我不記得我的想法是在這裏。它詢問關於s3cmd或S3使用單詞「gigabyte」,而不是這個PHP代碼。 – dfrankow

1

的AWS控制檯不會告訴你這一點,但你可以使用Bucket ExplorerCloudberry Explorer獲得桶的總規模。兩者都有免費版本。

注意:這些產品仍然需要獲取每個單獨對象的大小,因此可能需要很長時間才能處理大量對象。

+0

雖然我只能看到一個試用軟件。該優惠已被移除? – Trefex

+1

@Trefex http://www.cloudberrylab.com/free-amazon-s3-explorer-cloudfront-IAM.aspx –

-2

我使用Cloud Turtle來獲取單個桶的大小。如果存儲桶大小超過> 100 Gb,則需要一些時間才能顯示大小。 雲烏龜是免費的。

+8

請小心使用此軟件。它安裝了額外的Chrome擴展,似乎相當垃圾。 – styks

33

s3cmd可以通過運行s3cmd du向您顯示此信息,可以選擇將存儲桶名稱作爲參數傳遞。

+1

僅供參考 - 我試過這個和aws cli版本在cudds答案。它們都可以正常工作,但在我嘗試使用版本1.5.0-rc1的情況下,s3cmd明顯較慢。 – DougW

+0

@DougW:謝謝,有用的信息。 AWS CLI 1.0.0 [2013年9月發佈](https://aws.amazon.com/releasenotes/CLI/6178285823861575),因此在我寫答案時並不存在。 – markusk

+0

s3cmd不支持AWS4散列,因此它不能用於任何新區域,包括EU區域「歐盟中央1」 –

7

在具有python(與pip安裝程序)的Linux中,grepawk,安裝AWS CLI(命令行工具EC2,S3以及許多其他服務)

sudo pip install awscli 

然後創建一個.awssecret文件您有如下內容的主文件夾(如果需要調整的關鍵,祕密和地區):

[default] 
aws_access_key_id=<YOUR_KEY_HERE> 
aws_secret_access_key=<YOUR_SECRET_KEY_HERE> 
region=<AWS_REGION> 

將此文件讀寫只有你的用戶:

sudo chmod 600 .awssecret 

並將其導出到您的環境

export AWS_CONFIG_FILE=/home/<your_name>/.awssecret 

然後在終端中運行(這是一個單行命令,通過\爲方便閱讀在這裏分開):

aws s3 ls s3://<bucket_name>/foo/bar | \ 
grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | \ 
awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}' 
  • aws部分列出了存儲桶(或可選的「子文件夾」)
  • grep部分刪除(使用-v)與正則表達式匹配的行(使用-E)。^$爲空白行,--是用於在aws s3 ls
  • 最後awk輸出端的分離器線簡單地添加到total所得輸出(尺寸單位爲KB)的第三式柱然後在最後
顯示它

注意該命令適用於當前桶或「文件夾」,而不是遞歸

1

基於@ cudds的回答是:

function s3size() 
{ 
    for path in $*; do 
     size=$(aws s3 ls "s3://$path" --recursive | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{printf "%.2fGb\n", (total/1024/1024/1024)}') 
     echo "[s3://$path]=[$size]" 
    done 
} 

... 

$ s3size bucket-a bucket-b/dir 
[s3://bucket-a]=[24.04Gb] 
[s3://bucket-b/dir]=[26.69Gb] 

此外,Cyberduck方便地允許大小的計算桶或文件夾。

19

AWS CLI現在支持--query參數,其中需要JMESPath表達式。

這意味着您可以使用sum(Contents[].Size)list-objects給出的尺寸值進行求和,並計數如length(Contents[])

這可以使用AWS官方CLI爲下方運行,並在Feb 2014

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

我不得不在Windows命令行中的查詢字符串周圍使用雙引號。雖然像冠軍一樣工作。 –

4

引入除了克里斯托弗的回答。

如果你需要統計的版本桶使用總規模:

aws s3api list-object-versions --bucket BUCKETNAME --output json --query "[sum(Versions[].Size)]" 

它計算兩個最新和存檔的版本。

5

獲取大桶大小通過API(aws cli或s4cmd)很慢。這裏的使用bash我HowTo explaining how to parse S3 Usage Report一個班輪:

cat report.csv | awk -F, '{printf "%.2f GB %s %s \n", $7/(1024**3)/24, $4, $2}' | sort -n 
1

Mini John的回答完全爲我工作!真棒......不得不從歐洲加

--region eu-west-1 

雖然

42

我不知道這個時候加入到給定AWSCLI原來的問題是,3年前,但在命令行工具提供一個運行良好總結:

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

你和[Christopher's](http://stackoverflow.com/a/26963108/700420)是迄今爲止最好的答案。 –

+0

比接受的答案簡單得多。謝謝! –

6

雲手表還允許您爲S3存儲桶創建度量標準。它通過大小和對象數顯示您的指標。 服務>管理工具>雲手表。選擇您的S3存儲區所在的區域,大小和對象數量指標將在這些可用指標之間。

0

那麼,你也可以通過S3客戶端來實現,如果你喜歡人性化的用戶界面。

我使用CrossFTP,它是免費的,跨平臺的,在那裏你可以右鍵點擊文件夾目錄 - >選擇「屬性...」 - >點擊「計算」按鈕旁邊的大小和瞧。

1

這是一個古老的問題,但自從我在尋找答案時,我碰到了它。一些答案讓我記得我使用S3瀏覽器來管理數據。您可以點擊一個存儲桶並點擊屬性,它會顯示總數。很簡單。我強烈推薦的瀏覽器:https://s3browser.com/default.aspx?v=6-1-1&fam=x64

6

要使用AWS控制檯找出S3桶的大小:

  1. 點擊S3桶名稱
  2. 選擇「管理」選項卡
  3. 單擊「度量」導航按鈕
  4. 默認情況下,你應該看到桶

希望這有助於儲存度量。

相關問題