AWS S3的doesObjectExist费用是多少?

9
AWS S3 Java SDK提供了一个方法doesObjectExist(),用于检查S3中是否存在对象。它内部使用的操作是什么?是GETLIST还是HEAD
我的关注点主要与其成本相关。从S3文档中可以看到,美国西部俄勒冈州的费用为- PUT、COPY、POST或LIST请求每1,000个请求0.005美元
GET、SELECT和所有其他请求每1,000个请求0.0004美元 doesObjectExist()的成本属于第一类还是第二类?此外,我在某个地方读到,这个操作需要ListBucketGetObject权限。那么这个操作是否会产生上述两种类别的费用?

1
AWS SDK 适用于哪种编程语言? - Mike Doe
@emix Java。我更新了这篇文章。 - krackoder
1个回答

9

看代码,doesObjectExist() 方法内部调用了 getObjectMetadata (链接, 链接)。

如果你深入一点进入代码,实际的 HTTP 请求是一个 HEAD 请求,所以我强烈怀疑他们只是对对象本身进行了 HEAD 请求。

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

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

您需要s3:GetObject权限才能执行此操作。有关更多信息,请参阅Amazon Simple Storage Service Developer Guide中的策略中指定权限。如果您请求的对象不存在,则Amazon S3返回的错误取决于您是否还具有s3:ListBucket权限。


感谢指出代码问题。因此,在所有情况下(无论对象是否存在),它都将被归类为“GET、SELECT、其他请求”类别? - krackoder
3
没问题。虽然 HEAD 请求在技术上与 GET 请求不同(如果启用 S3 存储桶日志记录,您将看到两种请求的不同结果),但定价相同。使用 HEAD 请求可以节省数据传输费用,因为您显然不会在有效负载中获取文件内容。 - Viccari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接