AWS S3 doObjectExist 成本

nis*_*ant 5 java amazon-s3 amazon-web-services aws-sdk

AWS S3 Java SDK 提供了一种方法doesObjectExist()来检查对象是否存在于 S3 中。它内部使用什么操作?是GET, LIST, 还是HEAD?

我的担忧主要与它的成本有关。根据 S3 文档,美国西俄勒冈州的成本是 - PUT、COPY、POST 或 LIST 请求每 1,000 个请求 $0.005

GET、SELECT 和所有其他请求每 1,000 个请求 $0.0004

成本doesObjectExist()属于第一类还是第二类?此外,我正在阅读此操作需要ListBucketGetObject权限的地方。那么这是否意味着此操作会产生上述两种类型的成本?

Vic*_*ari 10

查看代码,该doesObjectExist()方法内部调用getObjectMetadatalink , link)。

如果你更深入地研究一下代码,实际的 HTTP 请求就是一个HEAD请求,所以我强烈怀疑他们只是HEAD在对象本身上执行 a 操作。

REST API的描述GetObjectMetadataRequest和调用也类似。HEAD

关于权限,你是正确的(下面的摘录也来自HEADREST API上的请求):

您需要 s3:GetObject 权限才能执行此操作。有关更多信息,请转到 Amazon Simple Storage Service 开发人员指南中的在策略中指定权限。如果您请求的对象不存在,Amazon S3 返回的错误取决于您是否也具有 s3:ListBucket 权限。

  • 正确的。尽管 HEAD 请求在技术上与 GET 不同(如果您启用 S3 存储桶日志,您将看到两者的不同结果),但定价是相同的。使用 HEAD 可以节省数据传输费用,因为显然您不会在有效负载中获取文件内容。 (3认同)