一段时间后,通过 CLI 的 AWS S3 上传失败,出现异常“无法连接到端点 URL”

sgX*_*sgX 2 amazon-s3 amazon-web-services aws-cli

我正在尝试将大文件上传到 S3 存储桶(~2.3 GB)。传输开始,但在一段时间后突然失败。我第一次尝试时,我能够成功上传,这应该意味着该命令工作正常。

我的命令:aws s3 cp local\path\to\file s3://bucket/remotepath

这是一段时间以来的进展情况:

Completed 136.8 MiB/2.3 GiB (542.4 KiB/s) with 1 file(s) remaining

上传开始并在一段时间后失败,例外情况:

upload failed: local\path\to\file to s3://bucket/remotepath Could not connect to the endpoint URL: "https://bucket.s3.us-east-1.amazonaws.com/remotepath?uploadId=someUploadId"

凭证看起来不错:

aws configure
AWS Access Key ID [****************XXXX]:
AWS Secret Access Key [****************XXXX]:
Default region name [us-east-1]:
Default output format [json]:
Run Code Online (Sandbox Code Playgroud)

互联网连接也保持一致。

nslookup s3.amazonaws.com
Server:  modem.Home
Address:  192.168.0.1
Non-authoritative answer:
Name:    s3-1.amazonaws.com
Address:  52.X.X.X
Aliases:  s3.amazonaws.com

ping s3.amazonaws.com
Ping statistics for 52.X.X.X:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 77ms, Maximum = 84ms, Average = 80ms
Run Code Online (Sandbox Code Playgroud)

两个问题:

  1. 如何调试并查找失败原因?
  2. 我该怎么做才能确保它可靠地工作?

amo*_*hic 7

解决方案

即使具有稳定且相当快速的 Internet 连接,如果超出了可用上传带宽,通过 aws cli 将大文件上传到 S3 也可能会失败并出现此错误。

可以通过调整aws cli 配置( ~/aws/.config) 中的一些值来解决此问题:

  • max_concurrent_requests- 将其设置为比默认值10 (我使用的4)更小的数字。
  • max_bandwidth- 使用默认值时,将此值减少到略小于上传速度报告的数字aws s3(在我的例子中是1.2MB/s,所以我将此值设置为1MB/s)。

推理

我注意到当aws s3上传运行时,我的互联网连接无法使用。即使在单独的设备上加载一个简单的网页也会超时,DNS 查找也会超时。这让我怀疑它aws s3太擅长饱和上传带宽,以至于阻止出站连接成功完成 -包括它自己的

默认情况下,上传方式aws s3是多部分的,这意味着超过一定大小 ( multipart_threshold) 的文件会被分成多个块,这些块会单独并发上传(最多max_concurrent_requests一次)。这些上传请求的组合带宽上限为max_bandwidth

我怀疑如果max_bandwidthis >= Internet 连接的上传带宽,最终连接会饱和,新的多部分上传请求之一无法连接到 S3,从而导致错误Could not connect to the endpoint URL...

限制max_bandwidth可能是这里的关键因素。减少它可以确保一些带宽可供其他出站请求完成。这不仅包括aws s3自己的并发上传请求,还包括可能尝试使用 Internet 连接的任何其他人。如果上传带宽达到最大,则实际上不需要大量并发连接,并且每个新连接都是潜在的故障点。因此通过减少它们max_concurrent_requests也是有意义的。

另请注意,您可以使用--debug来获取详细的调试输出aws s3

  • 在与这个问题斗争了几个月之后,这是唯一真正帮助我的答案。限制上传速度立即解决了问题。其他人都非常关注区域设置。谢谢你! (2认同)