【问题标题】:Boto3 s3 head_bucket() times out cross regionBoto3 s3 head_bucket() 跨区域超时
【发布时间】:2017-09-14 00:55:46
【问题描述】:

我有一个 boto3 s3 调用来检查存储桶是否存在。我的代码用完了 us-east-1,而我正在检查的 s3 存储桶在 us-west-2 中。

我能够得到我测试过的s3客户端罚款,然后我打电话:

s3_client.head_bucket(Bucket='mybucket')

这个电话似乎永远挂了。当我得到一些关于错误的回溯时,它说: ConnectTimeoutError(botocore.awsrequest.AWSHTTPSConnection at...'连接到 s3-us-west-2.amazonaws.com 超时'。

我在 us-east-1 中使用存储桶尝试了相同的代码,并且代码返回正常。

为什么在进行此调用时代码会挂起?这是跨区域的问题吗?

【问题讨论】:

  • 您是否使用 VPC Endpoint 访问 S3?

标签: python amazon-web-services amazon-s3 boto3


【解决方案1】:

您是从 EC2 运行它吗?如果是这样,请检查您的安全组以确保允许此 HTTPS 出口流量。

【讨论】:

  • 从 EC2 运行,似乎应该允许在端口 443 出站允许出站。我找到了一种解决方法,使用 s3_west = boto3.resource('s3', region_name='us-west-2'),然后使用 s3_west.meta.client.head_bucket(Bucket='mybucket')。宁愿使用 s3 客户端而不是资源进行调用
  • 这听起来像一个错误。什么版本的boto?
  • 我使用的构建脚本是 'pip install boto3' 所以我相信它是最新版本的 boto3。在想,如果我没有正确的出口规则来处理传出流量,我会得到一个错误而不是永远挂起......这让我相信它也可能是一个错误。 boto3 在不同地区的工作方式是否不同?我的意思是,boto3 调用可以在 us-east-1 中工作,但在 us-west-2 中不能工作吗?
  • 永远挂起只与丢包有关,而不是拒绝。但是,当您执行一组不同的 boto 对象时它会起作用,这让我相信包中存在 URL 格式的错误。您可以在执行非工作代码和工作代码时对出站流量运行 tcpdump,以便我们可以看到差异? sudo tcpdump -i eth0 src dst 端口 443
猜你喜欢
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 2017-05-06
  • 1970-01-01
  • 2021-01-24
  • 2022-08-06
  • 2017-07-19
相关资源
最近更新 更多