针对 Amazon SQS 网络错误进行问题排查 - Amazon Simple Queue Service

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

针对 Amazon SQS 网络错误进行问题排查

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

ETIMEOUT error

当客户端无法建立与 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)实例必须具有互联网连接

  • Amazon Virtual Private Cloud(Amazon VPC)端点

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

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

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

此外,Amazon SQS VPC 端点 AWS 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

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

故障排除

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

  • Windows and Linux OS

    nslookup sqs.<region>.amazonaws.com 
  • AWS CLI 或者适用于 Python 的 SDK 原有端点:

    nslookup <region>.queue.amazonaws.com

如果收到失败的输出,请按照《AWS Knowledge Center 指南》中的“How does DNS work and how do I troubleshoot partial or intermittent DNS failures?”的说明进行操作。

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

  • 重启您的应用程序。

  • 确认您的 Java 应用程序没有错误的 DNS 缓存。如果可能,对您的应用程序进行配置,使其符合 DNS TTL。有关更多信息,请参阅 Setting the JVM TTL for DNS name lookups

有关如何针对网络错误进行问题排查的更多信息,请参阅《AWS Knowledge Center 指南》中的“How do I troubleshoot Amazon SQS ‘ETIMEOUT’ and ‘UnknownHostException’ connection errors?”