如何解决为什么Amazon S3客户端位置依赖?
我正在玩amazon-s3
。我的用例是只列出以前缀开头的键。
import boto3
s3 = boto3.client('s3',"eu-west-1")
response = s3.list_objects_v2(Bucket="my-bucket",MaxKeys=1,Prefix="my/prefix/")
for content in response['Contents']:
print(content['Key'])
my-bucket
位于use1
中。我很惊讶euw1
的python客户端能够执行此类请求。作为参考,我的Scala客户端:
val client = AmazonS3ClientBuilder.standard().build()
client.listObjectsV2("my-bucket","my-prefix")
出现错误
com.amazonaws.services.s3.model.AmazonS3Exception:存储桶位于以下区域:us-east-1。请使用该区域重试请求
这是预期的。
我的问题是,为什么s3Client依赖于位置?选择正确的位置有什么优势吗?是否有任何隐藏成本与位置不匹配?
解决方法
我的问题是,为什么s3Client依赖于位置
因为存储桶是区域性资源,即使它们假装不是。尽管可以全局访问S3存储桶,但基础资源仍托管在特定的基础AWS区域中。如果您使用的是AWS客户端SDK来访问资源,则需要连接到存储桶的区域S3终端节点。
选择合适的位置是否有优势?
更低的延迟。如果您的服务在eu-west-1
中,那么将您的存储桶也放在那里是很有意义的。您也不会支付跨区域数据传输率,而是AWS的内部区域率。
是否存在任何与地点不符的隐藏费用?
是的。数据输出的成本因地区而异,从一个区域向另一区域发送数据要比在同一区域的服务之间发送数据花费更多。
关于为什么boto3库没有引发错误,可能是在发出list_objects_v2
调用之前询问引擎盖下的S3 api,以确定存储桶的位置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。