【发布时间】:2020-09-26 23:57:50
【问题描述】:
假设我更新了一个现有的 AWS S3 对象。
aws s3 mv dataset.csv s3://my-bucket
然后我立即提交 HEAD 请求以获取 ETag。
aws s3api head-object --bucket my-bucket --key dataset.csv
我是否保证从 HEAD 获得最新的 ETag,或者即使在 aws s3 mv 在本地完成之后,AWS 仍然有可能对对象进行哈希处理?更一般地说,我可以在哪里阅读有关 AWS ETag 时间和可用性保证的信息?
编辑:自定义 ETag
按照以下 cmets 中的建议,我尝试使用 put-object 的 --content-md5 标志提供自己的 ETag,但遇到了错误。
$ md5sum file
d41d8cd98f00b204e9800998ecf8427e file
$ aws s3api put-object --bucket my-bucket --key file --body a --content-md5 d41d8cd98f00b204e9800998ecf8427e
An error occurred (InvalidDigest) when calling the PutObject operation: The Content-MD5 you specified was invalid.
【问题讨论】:
-
问题不在于是否更新了电子标签。这是您是否正在访问“更新”对象。见:Amazon S3 data consistency model
-
所以 ETag 和数据匹配,但它们都可能是陈旧的?我需要做些什么来保证立即的一致性,而不仅仅是最终的一致性?在 PUT 中,有没有办法将 VersionId 或 Metadata 设置为我在本地检查的 UUID?
-
是的。不,一致性模型是由 S3 定义的。顺便说一句,我认为您假定 ETag 是由 S3 计算的,但实际上您可以放置自己的 ETag。所以你可以做的是利用 ETag 来存储你自己的 UUID,然后用它来检查。
-
自定义 ETag 更适合我的目的。谢谢!
-
那么我该如何提供 ETag?我尝试了
--content-md5标志,但遇到了错误(上面的新编辑)。
标签: amazon-web-services amazon-s3 aws-cli