首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使SDK连接到S3桶持久?

如何使SDK连接到S3桶持久?
EN

Stack Overflow用户
提问于 2021-06-07 08:25:19
回答 1查看 746关注 0票数 0

我使用boto3库在S3中放置对象。我想在我的服务器上创建一个python服务,它连接到AWS中的桶,每当我向它发送文件路径时,它都会将它放入桶中:

代码语言:javascript
复制
s3_resource = boto3.resource(
    's3',
    endpoint_url='...',
    aws_access_key_id='...',
    aws_secret_access_key='...'
)
bucket = s3_resource.Bucket('name')

为了上传,我将请求发送到此方法:

代码语言:javascript
复制
def upload(path):
    bucket.put_object(...)

到桶的连接应该是持久的,这样每当我调用upload方法时,它都会快速地将对象放入桶中,而不需要每次都连接到桶中。

如何在我的s3_resource上启用长寿命连接?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-07 09:08:50

编辑

SDK试图成为底层API调用的抽象。每当您想要将一个对象放入一个S3桶中时,就会产生一个API调用。API调用通过网络发送到AWS,这需要建立到AWS服务器的连接。此连接可以保持较长时间打开,因此不需要每次进行API调用时都重新建立它。这有助于减少网络开销,因为建立连接的成本相对较高。

从您的角度来看,这些应该是实现细节,您不必担心,因为SDK (boto3)会为您处理这个问题。有一些选项可以调整它处理事物的方式,但这些选项被认为是高级选项,您应该知道自己在做什么;-)

boto3中资源的生命周期或多或少与底层网络连接无关。您将看到这种影响的方式,是通过更高的延迟,当有,没有预先存在的连接,可以重新使用。

您正在寻找的是在boto3中保持活力的选项。

可以在两个级别上启用这些功能:

TCP

  • 您可以在SDK配置中设置tcp_keepalive选项,默认设置为false
  • 有关这方面的更多细节,可以在文档中找到。

HTTP

  • 对于HTTP-保持活动,没有什么需要显式地做-底层库处理隐式。在使用aws-sdk-js处理这个问题时,有一个常见的优化建议,但是SDK的行为不同,这在Python中是不必要的。在Github问题中对此进行了长时间的讨论。
  • 如果要显式设置“配置”设置,可以使用事件系统执行本答复建议的操作:
代码语言:javascript
复制
def set_connection_header(request, operation_name, **kwargs):
    request.headers['Connection'] = 'keep-alive'

ddb = boto3.client('dynamodb')
ddb.meta.events.register('request-created.dynamodb', set_connection_header)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67868254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档