使用C#SDK获取Amazon S3中存储桶使用的存储

时间:2019-06-04 20:07:21

标签: c# amazon-s3 sdk

我的任务是提供一个api端点,以了解特定模块在我们的Amazon s3存储桶中使用了多少空间。我正在使用C#SDK。

我是通过改编https://docs.aws.amazon.com/AmazonS3/latest/dev/ListingObjectKeysUsingNetSDK.html

中的代码来实现的
   private long GetUsedBytes(string module, string customer)
    {
        ListObjectsRequest listRequest = new ListObjectsRequest()
        {
            BucketName = BucketName,
            Prefix = module + "/" + customer
        };
        ListObjectsResponse listResponse;
        long totalSize = 0;
        do
        {
            listResponse = s3Client.ListObjects(listRequest);
            foreach (S3Object obj in listResponse.S3Objects)
            {
                totalSize += obj.Size;
            }
            listRequest.Marker = listResponse.NextMarker;
        } while (listResponse.IsTruncated);
        return totalSize;
    }

我的问题是:有没有办法使用sdk 做到这一点而又不会从桶中拉出所有实际的s3object?关于使用CLI进行操作,有几个很好的答案:

AWS S3: how do I see how much disk space is using https://serverfault.com/questions/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket

但是我还不能直接使用SDK找到一个。我是否必须以某种方式模仿sdk才能做到这一点?我考虑的另一种方法是获取所有键并查询其元数据,但是获取我发现的所有键的唯一方法是获取所有对象,如^上方的链接中所示。如果有一种方法可以获取具有特定前缀的对象的所有元数据,那将是理想的选择。

感谢您的时间!

〜乔什

1 个答案:

答案 0 :(得分:0)

您的代码不是 从Amazon S3下载任何对象。它仅调用ListObjects()并总计每个对象的大小。每1000个对象将进行一次API调用。

或者,您可以从Amazon CloudWatch检索每个存储桶的大小

来自Monitoring Metrics with Amazon CloudWatch - Amazon S3

  

指标:BucketSizeBytes

     

存储在存储桶中的数据量(以字节为单位)。该值是通过将存储桶中所有对象(当前对象和非当前对象)的大小相加得出的,包括所有不完整的分段上传到存储桶的所有部分的大小。

因此,只需从Amazon CloudWatch检索指标,而不是自己计算。