我尝试在 Amazon Simple Storage Service(Amazon S3)存储桶上运行 cp 或 sync 命令。但是,我收到了“Could not connect to the endpoint URL”错误消息。我应该如何排查此问题?
简短描述
要使用 AWS 命令行界面 (AWS CLI) 运行 cp 或 sync 命令,您的计算机必须连接到正确的 Amazon S3 终端节点。否则,您会收到“Could not connect to the endpoint URL”错误消息。
**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。
要排查此错误,请检查以下项:
- 确认您使用的 AWS 区域和 Amazon S3 终端节点正确。
- 验证您的网络是否可连接到这些 Amazon S3 终端节点。
- 验证您的 DNS 是否可解析到这些 Amazon S3 终端节点。
- 如果您在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上看到此错误,请检查 Amazon Virtual Private Cloud (Amazon VPC) 配置。
解决方法
确认您使用的 AWS 区域和 Amazon S3 终端节点正确
当您使用 AWS CLI 运行命令时,API 请求将发送到默认 AWS 区域的 S3 终端节点。或者,在命令中指定区域时,API 请求将发送到特定区域的 S3 终端节点。然后,AWS CLI 可以将请求重定向到存储桶的区域 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 命令之前,请务必正确书写关联的区域和 S3 终端节点。
注意:如果您使用的是 Amazon S3 Transfer Acceleration,请参阅 Amazon S3 Transfer Acceleration 入门,了解终端节点名称。
验证您的网络是否可以连接到 S3 终端节点
确认您的网络防火墙允许流向相关 Amazon S3 终端节点的流量通过您用于 Amazon S3 流量的端口。
例如,以下 telnet 命令可测试通过端口 443 到 ap-southeast-2 的区域 S3 终端节点的连接:
**注意:**请务必将区域终端节点和端口(443 或 80)替换为与您的使用案例相关的值。
telnet s3.ap-southeast-2.amazonaws.com 443
验证您的 DNS 是否可解析到相关 S3 终端节点
要确认您的 DNS 可以解析为 Amazon S3 终端节点,请使用 DNS 查询工具,如 nslookup 或 ping。以下示例使用 nslookup:
nslookup s3.amazonaws.com
以下示例使用 ping 来确认 DNS 能否解析到该 S3 终端节点:
ping s3.amazonaws.com
如果 DNS 无法解析到相关 S3 终端节点,则排查 DNS 配置问题。如果您的 DNS 提供程序是 Amazon Route 53,请参阅 Amazon Route 53 问题排查。
如果您在 EC2 实例上看到此错误,然后检查 VPC 配置
如果 EC2 实例位于公有子网中:
如果 EC2 实例位于私有子网中:
- 请检查是否存在与子网的路由表关联的网络地址转换 (NAT) 网关。NAT 网关可预置到达 Amazon S3 终端节点的 Internet 路径。
- 如果您使用的是 Amazon S3 的 VPC 终端节点,请验证是否在 AWS CLI 配置文件中设置了正确的区域。Amazon S3 的 VPC 终端节点特定于区域。如果在 VPC 终端节点位于不同区域中时使用 --region us-west-1 运行 sync 命令,则 CLI 将联系 https://s3.us-west-1.amazonaws.com。因此,您收到“Could not connect to the endpoint URL”错误。