对 Amazon SQS 网络错误进行故障排除 - Amazon Simple Queue Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

对 Amazon SQS 网络错误进行故障排除

以下主题涵盖了 Amazon SQS 中网络问题的最常见原因以及如何对其进行故障排除。

ETIMEOUT error

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

故障排除

  • 检查网络连接

    通过运行类似的命令来测试您与 Amazon SQS 的网络连接。telnet

    Example: telnet sqs.us-east-1.amazonaws.com 443

  • 检查网络设置

    • 确保您的本地防火墙规则、路由和访问控制列表 (ACL) 允许您使用的端口上的流量。

    • 安全组出站(出口)规则必须允许流向端口 80 或 443 的流量。

    • 网络 ACL 出站(出口)规则必须允许流向 TCP 端口 80 或 443 的流量。

    • 网络 ACL 入站(入口)规则必须允许 TCP 端口 1024-65535 上的流量。

    • 连接到公共互联网的亚马逊弹性计算云 (Amazon EC2) 实例必须具有互联网连接。

  • 亚马逊虚拟私有云(亚马逊 VPC)终端节点

    
如果您通过 Amazon VPC 终端节点访问 Amazon SQS,则终端节点安全组必须允许通过端口 443 进入客户端安全组的入站流量。与 VPC 终端节点的子网关联的网络 ACL 必须具有以下配置:

    • 网络 ACL 出站(出口)规则必须允许 TCP 端口 1024-65535(临时端口)上的流量。

    • 网络 ACL 入站(入口)规则必须允许端口 443 上的流量。

此外,亚马逊 SQS VPC 终端节点 Amazon Identity and Access Management (IAM) 策略必须允许访问。以下示例 VPC 终端节点策略指定允许 IAM 用户MyUser向 Amazon SQS 队列发送消息。MyQueue其他操作、IAM 用户和 Amazon SQS 资源被拒绝通过 VPC 终端节点进行访问。

{ "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

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

故障排除

使用该nslookup实用程序返回与主机名关联的 IP 地址:

  • Windows and Linux OS

    nslookup sqs.<region>.amazonaws.com 
  • Amazon CLI 或者适用于 Python 传统端点的 SDK:

    nslookup <region>.queue.amazonaws.com

如果您收到不成功的输出,请按照 DNS 的工作原理以及如何解决部分或间歇性的 DNS 故障中的说明进行操作Amazon 知识中心指南中。

如果您收到了有效的输出,则很可能是应用程序级别的问题。要解决应用程序级别的问题,请尝试以下方法:

  • 重新启动您的应用程序。

  • 确认您的 Java 应用程序没有错误的 DNS 缓存。如果可能,请将您的应用程序配置为符合 DNS TTL。有关更多信息,请参阅为 DNS 名称查询设置 JVM TTL

有关如何解决网络错误的更多信息,请参阅如何解决 Amazon SQS 的 “ETIMEOUT” 和 “UnknownHost异常” 连接错误? 在Amazon 知识中心指南中。