Amazon web services 获取amazon s3存储桶大小的最快方法
到目前为止,我通过迭代所有对象并将单个对象的大小相加来计算AmazonS3存储桶的大小。 这相当耗时。 我尝试了并行化操作,节省了一些时间,但即使这样也需要很多时间 我使用的系统:EC2 m1.L 有没有解决办法或更好的方法来确定桶的大小Amazon web services 获取amazon s3存储桶大小的最快方法,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,到目前为止,我通过迭代所有对象并将单个对象的大小相加来计算AmazonS3存储桶的大小。 这相当耗时。 我尝试了并行化操作,节省了一些时间,但即使这样也需要很多时间 我使用的系统:EC2 m1.L 有没有解决办法或更好的方法来确定桶的大小 注意:我没有访问aws控制台的权限,只是访问键可能有点晚了,但是我也在寻找这个,发现您可以从CloudWatch获得已经计算过的信息。在命令行中,您可以调用此命令来列出BucketSizeBytes stat可用的S3存储桶: aws cloudwatch l
注意:我没有访问aws控制台的权限,只是访问键可能有点晚了,但是我也在寻找这个,发现您可以从CloudWatch获得已经计算过的信息。在命令行中,您可以调用此命令来列出BucketSizeBytes stat可用的S3存储桶:
aws cloudwatch list-metrics --metric-name BucketSizeBytes
下面列出了如下内容:
{
"Namespace": "AWS/S3",
"Dimensions": [
{
"Name": "BucketName",
"Value": "myReallyGreatBucket"
},
{
"Name": "StorageType",
"Value": "StandardStorage"
}
],
"MetricName": "BucketSizeBytes"
}
因此,基本上,存储桶大小被划分为标准存储大小和减少冗余存储大小字节数。您希望将这些存储分开,这样您就可以知道您正在使用多少全价存储以及有多少更便宜的存储。如果您想将总字节数用于其他用途,只需将这两个字节相加即可。要获取它们,可以调用它来获取各种随时间计算的计数。我通过指定获取一天的时间来实现它:
aws cloudwatch get-metric-statistics --namespace AWS/S3 --dimensions Name=BucketName,Value=myReallyGreatBucket Name=StorageType,Value=StandardStorage --metric-name BucketSizeBytes --start-time 2015-08-23T00:00:00 --end-time 2015-08-24T00:00:00 --period 86400 --statistics Average --unit Bytes
{
"Datapoints": [
{
"Timestamp": "2015-08-23T00:00:00Z",
"Average": 436306296.0,
"Unit": "Bytes"
}
],
"Label": "BucketSizeBytes"
}
当我试图得到一分钟或一小时的平均值时,它没有起作用——只是返回了一个空列表。整整一天,它都如图所示工作
您可以通过RESTAPI调用相同的东西,但我还没有尝试过。大概相同的值也会起作用。您可以使用API-getBucket-返回的数据包括大小。您仍然需要对结果进行迭代和求和,但这可能会更快:它将如何更快?据说它最多只返回1000个对象。每1000个对象只需要一个API调用。我说这可能更快-可能值得一试?如果阅读该链接,您将看到可以使用marker属性来页面数据。看Jim Z的答案这里没有很多选择。如果您确实需要定期执行类似的操作,您可能希望在RDMS中保留一些额外的元数据。使用cloudwatch指标是个好主意,但由于某些原因,BucketSizeBytes只包括标准和减少冗余存储的大小。不包括glaser字节!如果你想要水桶的尺寸,包括Glaser,我仍然找不到一种不循环所有钥匙的方法。@Sam OP问的是S3,而不是冰川-所以我没有考虑这在那里是否有效:-)很高兴知道这在那里不起作用。我想知道,您是否尝试更改名称空间?在命令中,我显示它是“AWS/S3”。也许有冰川名称空间?如果有,那么您可能还必须传递不同的维度和/或度量名称。是否可以以TB为单位打印当前存储桶大小而不是平均值?