为S3存储桶中的所有对象获取元数据

时间:2017-12-19 02:48:02

标签: powershell amazon-web-services amazon-s3

我目前正在通过附加包含md5哈希的元数据标记来标记s3中的对象。当我上传对象时,我在将对象推入s3之前检查md5哈希是否不同。

我想知道是否有办法获取s3存储桶中所有对象的元数据,因为似乎需要花一些时间为每个项目单独获取它们。

我使用以下内容从s3中获取哈希

$hash = Get-S3ObjectMetadata -Credential $AwsCredentials -BucketName $Bucketname -Key $key

当我删除-Key值时,我得到以下错误

Get-S3ObjectMetadata : Key is a required property and must be set before making this call.

我也尝试了get-help -full并在-key

上获得了以下信息
    -Key <System.String>
    The key of the object.

    Required?                    false
    Position?                    2
    Default value                None
    Accept pipeline input?       True (ByPropertyName)
    Accept wildcard characters?  false

这似乎与我得到的错误相矛盾

1 个答案:

答案 0 :(得分:1)

获取对象元数据没有批处理模式。您必须单独获取每个对象的元数据。通常的方法是使用多个进程或线程来发送并行请求。一个桶应该能够以几百reqs / sec的速率处理这些请求而没有任何问题。

您的解决方案存在缺陷,因为它无法扩展。我看到的一个解决方案是将对象密钥实际设置为对象有效负载的散列(sha256是更好的选择,因为md5和sha1都存在已知的冲突),这提供了基本上自动的重复数据删除。

除非您使用SSE-CSSE-KMS,否则etag是对象正文的md5sum 个别部分的二进制(非十六进制)md5sum的md5sum使用分段上传API上传对象时,后跟-和部件数量。