如何获取 Amazon S3 存储桶的大小?

如何获取 Amazon S3 存储桶的大小?

我想要绘制 Amazon S3 存储桶的大小(以字节为单位和项目数)图表,并寻找一种有效的方法来获取数据。

s3命令工具提供了一种使用 来获取文件总大小的方法s3cmd du s3://bucket_name,但我担心它的扩展能力,因为它看起来像是获取每个文件的数据并计算自己的总和。由于亚马逊以 GB-Months 为单位向用户收费,因此他们不直接公开此值似乎很奇怪。

虽然亚马逊的 REST API返回存储桶中的项目数,s3命令似乎没有暴露它。我可以这样做,s3cmd ls -r s3://bucket_name | wc -l但这似乎是一种黑客行为。

红宝石AWS::S3该库看起来很有前途,但只提供存储桶项目的数量,而不是存储桶的总大小。

是否有人知道任何其他命令行工具或库(最好是 Perl、PHP、Python 或 Ruby)可以提供获取这些数据的方法?

答案1

AWS CLI 现在支持--query采用路径表達式。

list-objects这意味着您可以使用sum(Contents[].Size)并像计算给出的大小值之和length(Contents[])

可以使用官方 AWS CLI 运行,如下所示,并在2014 年 2 月

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

答案2

现在只需使用官方 AWS 命令​​行客户端即可轻松完成此操作:

aws s3 ls --summarize --human-readable --recursive s3://bucket-name/

官方文档:AWS CLI 命令参考(版本 2)

如果您不想计算整个存储桶,这也接受路径前缀:

aws s3 ls --summarize --human-readable --recursive s3://bucket-name/directory

答案3

AWS 控制台:

作为2015 年 7 月 28 日您可以获取此信息通过 CloudWatch。如果您需要 GUI,请访问CloudWatch 控制台:(选择区域 > )指标 > S3

AWS CLI 命令:

这比这里发布的其他一些命令要快得多,因为它不需要单独查询每个文件的大小来计算总和。

 aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2015-07-15T10:00:00 --end-time 2015-07-31T01:00:00 --period 86400 --statistics Average --region eu-west-1 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=toukakoukan.com Name=StorageType,Value=StandardStorage

重要的:您必须在 Dimensions 参数中同时指定 StorageType 和 BucketName,否则您将得不到任何结果。您需要更改的只是--start-date--end-timeValue=toukakoukan.com


这是一个 bash 脚本,您可以使用它来避免手动--start-date指定--end-time

#!/bin/bash
bucket=$1
region=$2
now=$(date +%s)
aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time "$(echo "$now - 86400" | bc)" --end-time "$now" --period 86400 --statistics Average --region $region --metric-name BucketSizeBytes --dimensions Name=BucketName,Value="$bucket" Name=StorageType,Value=StandardStorage

答案4

如果您想从AWS控制台获取大小:

  1. 转到 S3 并选择存储桶
  2. 点击“指标”标签

在此处输入图片描述

默认情况下你应该看到桶总大小顶部指标

相关内容