

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 针对 Amazon SQS 网络错误进行问题排查
<a name="troubleshooting-network-errors"></a>

以下主题介绍了 Amazon SQS 中的网络问题的最常见原因，以及如何进行问题排查。

## ETIMEOUT error
<a name="etimeout-error"></a>

当客户端无法建立与 Amazon SQS 端点的 TCP 连接时，就会发生 ETIMEOUT 错误。

**故障排除 **– 
+ **检查网络连接**

  运行 `telnet` 等命令来测试与 Amazon SQS 的网络连接。

  Example: telnet sqs.us-east-1.amazonaws.com 443
+ **检查网络设置**
  + 确保您的本地防火墙规则、路由和访问控制列表（ACL）允许您使用的端口上的流量。
  + 安全组出站（出口）规则必须允许到端口 80 或 443 的流量。
  + 网络 ACL 出站（出口）规则必须允许到 TCP 端口 80 或 443 的流量。
  + 网络 ACL 入站（入口）规则必须允许 TCP 端口 1024-65535 上的流量。
  + 连接到公共互联网的 Amazon Elastic Compute Cloud（Amazon EC2）实例必须具有[互联网连接](https://docs.amazonaws.cn/vpc/latest/userguide/VPC_Internet_Gateway.html#vpc-igw-internet-access)。
+ **Amazon Virtual Private Cloud（Amazon VPC）端点**

   如果您通过 Amazon VPC 端点访问 Amazon SQS，则端点安全组必须允许通过端口 443 进入客户端安全组的入站流量。与 VPC 端点的子网关联的网络 ACL 必须具有以下配置：
  + 网络 ACL 出站（出口）规则必须允许 TCP 端口 1024-65535（临时端口）上的流量。
  + 网络 ACL 入站（入口）规则必须允许端口 443 上的流量。

 此外，Amazon SQS VPC 端点 Amazon Identity and Access Management（IAM）策略必须允许访问。以下示例 VPC 端点策略指定允许 IAM 用户 *MyUser* 将消息发送到 Amazon SQS 队列 *MyQueue*。通过该 VPC 端点的其他操作、IAM 用户和 Amazon SQS 资源的访问请求都会被拒绝。

```
{
    "Statement": [{
        "Action": ["sqs:SendMessage"],
        "Effect": "Allow",
        "Resource": "arn:aws:sqs:us-east-2:123456789012:MyQueue",
        "Principal": {
            "AWS": "arn:aws:iam:123456789012:user/MyUser"
        }
    }]
}
```

## UnknownHostException error
<a name="unknownhostexception-error"></a>

当无法确定主机 IP 地址时，就会发生 UnknownHostException 错误。

**故障排除 **– 

使用 nslookup 实用程序返回与主机名关联的 IP 地址：
+ Windows and Linux OS

  ```
  nslookup sqs.<region>.amazonaws.com 
  ```
+ Amazon CLI 或者适用于 Python 的 SDK 原有端点：

  ```
  nslookup <region>.queue.amazonaws.com
  ```

如果收到失败的输出，请按照《Amazon Knowledge Center 指南》**中的[“How does DNS work and how do I troubleshoot partial or intermittent DNS failures?”](https://repost.aws/knowledge-center/sqs-connection-error)的说明进行操作。

如果收到有效的输出，则可能是应用程序级别的问题。要解决应用程序级别的问题，可以尝试以下方法：
+ 重启您的应用程序。
+ 确认您的 Java 应用程序没有错误的 DNS 缓存。如果可能，对您的应用程序进行配置，使其符合 DNS TTL。有关更多信息，请参阅 [Setting the JVM TTL for DNS name lookups](https://docs.amazonaws.cn/sdk-for-java/v1/developer-guide/jvm-ttl-dns.html)。

有关如何针对网络错误进行问题排查的更多信息，请参阅《Amazon Knowledge Center 指南》**中的[“How do I troubleshoot Amazon SQS ‘ETIMEOUT’ and ‘UnknownHostException’ connection errors?”](https://repost.aws/knowledge-center/sqs-connection-error)。