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)
两个问题:
解决方案
即使具有稳定且相当快速的 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。
| 归档时间: |
|
| 查看次数: |
3577 次 |
| 最近记录: |