我想在我的 Amazon Simple Storage Service (Amazon S3) 存储桶上运行“cp”或“sync”AWS 命令行界面 (AWS CLI) 命令。但是,我遇到了一个错误。
解决方案
**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
要在 AWS CLI 上运行 cp 或 sync 命令,您的计算机必须连接到正确的 Amazon S3 端点。否则,您会收到一条错误消息,提示服务无法连接到端点 URL,或者连接已超时。根据您收到的错误,执行以下故障排除操作。
“Could not connect to the endpoint URL”错误
确认您有正确的区域和 Amazon S3 端点
当您在 AWS CLI 中运行命令时,它会向默认 AWS 区域的 Amazon S3 端点发送 API 请求。当您指定区域时,AWS CLI 会向特定区域的 Amazon S3 端点发送 API 请求。然后,AWS CLI 会将请求重定向到存储桶的区域 Amazon S3 端点。
如果指定的区域或端点出现拼写错误或其他错误,则您可能会收到“Could not connect to the endpoint URL”错误。例如,以下命令会返回错误,因为端点名称中多了一个 e:
aws s3 cp filename s3://DOC-EXAMPLE-BUCKET/ --endpoint-url https://s3-acceleratee.amazonaws.com
在运行 cp 或 sync 命令之前,请确认关联的区域和 Amazon S3 端点是否正确。运行 AWS CLI 命令时使用 --debug 标志来识别 AWS CLI 使用的端点。命令示例:
aws s3 cp filename s3://DOC-EXAMPLE-BUCKET/ --debug
**注意:**如果您使用 Amazon S3 Transfer Acceleration,请对存储桶启用它。使用端点bucket-name.s3-accelerate.amazonaws.com。或者,使用双栈端点bucket-name.s3-accelerate.dualstack.amazonaws.com通过 IPv6 连接到存储桶。将 bucket-name 替换为您的存储桶名称。
验证您的 DNS 是否可以解析为 Amazon S3 端点
如需确认您的 DNS 是否可以解析 Amazon S3 端点,请使用 nslookup、dig 或 ping 等 DNS 查询工具。命令示例:
nslookup s3.amazonaws.com
dig s3.amazonaws.com
ping s3.amazonaws.com
如果您的 DNS 无法解析为 Amazon S3 端点,请对您的 DNS 配置进行故障排除。如果使用 Amazon Route 53 作为 DNS 提供商,请参阅 对 Amazon Route 53 进行故障排除。
“Connect timeout on endpoint URL”错误
验证您的网络是否可以连接到 Amazon S3 端点
确认您的网络防火墙允许 Amazon S3 端点流量并且对该流量使用与 Amazon S3 流量相同的端口。
例如,以下 telnet 命令测试在端口 443 上与 ap-southeast-2 Amazon S3 端点的连接:
telnet s3.ap-southeast-2.amazonaws.com 443
要捕获和分析网络数据包并验证您的计算机能否成功完成与 Amazon S3 端点的 TCP 握手,请运行以下 tcpdump 命令:
sudo tcpdump -i eth0 'host s3.ap-southeast-2.amazonaws.com and port 443' -s0 -w samplecapture.pcap
注意:将 eth0 替换为您的弹性网络接口,将 ap-southeast-2 替换为您的 Amazon S3 端点区域,将 443 替换为您的端口。-s0 标志捕获完整的数据包,-w samplecapture.pcap 将捕获的内容写入到文件中。您可以使用诸如 Wireshark 之类的工具来分析文件中的信息。
查找 TCP 三次握手(SYN、SYN-ACK、ACK)以确认连接。如果您只看到没有 SYN-ACK 响应的 SYN 数据包,则说明存在防火墙或路由问题。
要检测通往 Amazon S3 端点的路径上的路由问题或数据包丢失问题,请运行以下 mtr 命令:
mtr -n -T -c 200 s3.ap-southeast-2.amazonaws.com -P 443 --report
注意:将 ap-southeast-2 替换为您的区域,将 443 替换为您的端口。-n 标志禁用 DNS 解析以加快测试速度,-T 标志使用比互联网控制消息协议 (ICMP) 更准确的 TCP 数据包。前面的命令运行 200 个周期的测试以提高统计精度,并生成报告。
在 Windows 上,你可以使用 WinMTR 进行类似的路由测试。查找可能影响与 Amazon S3 端点连接的高延迟、丢包或路由环路。
对于 Amazon EC2 实例,检查 VPC 配置
如果您在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上看到“Connection timeout”错误,请检查您的虚拟私有云 (VPC) 配置。
如果 EC2 实例位于公共子网中,请检查以下设置:
如果 EC2 实例位于私有子网中,请检查以下设置:
- 确保将 NAT 网关与子网的路由表相关联。
- 如果您将 VPC 端点用于 Amazon S3,请确认 AWS CLI 配置文件具有正确的区域。
**注意:**Amazon S3 的 VPC 端点是区域特定的。例如,您运行 sync 并指定 --region us-west-1,但 VPC 端点位于另一个区域。因此,您会收到“Could not connect to the endpoint URL”错误。
当您在 VPC 中使用 AWS PrivateLink 访问 Amazon S3 时,请使用 Reachability Analyzer。此工具可帮助您识别安全组、网络 ACL 或路由表中可能阻止连接的错误配置。例如,创建 Reachability Analyzer 分析以检查您的实例和接口端点之间的路径。