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

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

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

以下主题涵盖发出 Amazon SQS API 调用时系统返回的最常见错误,以及如何针对这些错误进行问题排查。

QueueDoesNotExist 错误

当 Amazon SQS 服务无法找到与 Amazon SQS 操作相关的指定队列时,系统将返回此错误。

可能的原因和缓解措施:

  • 区域不正确:查看 Amazon SQS 客户端配置,确认您在客户端上配置了正确的区域。如果您没有在客户端上配置区域,SDK 或 Amazon CLI 会从配置文件或环境变量中选择区域。如果 SDK 在配置文件中找不到区域,则默认情况下,SDK 会将区域设置为 us-east-1。

  • 队列最近可能被删除:如果队列在 API 调用之前已经被删除,那么 API 调用将返回此错误。查看 CloudTrail,确认在错误发生前是否有任何 DeleteQueue 操作。

  • 权限问题:如果发出请求的 Amazon Identity and Access Management(IAM)用户或角色没有所需的权限,则您可能会收到以下错误:

    The specified queue does not exist or you do not have access to it.

    查看权限,然后使用正确的权限进行 API 调用。

有关针对 QueueDoesNotExist 错误进行问题排查的更多信息,请参阅《Amazon Knowledge Center 指南》中的“如何解决对 Amazon SQS 队列进行 API 调用时出现的 QueueDoesNotExist 错误?”

InvalidAttributeValue 错误

使用不正确的策略或主体更新 Amazon SQS 队列资源策略或属性时,系统会返回此错误。

可能的原因和缓解措施:

  • 资源策略无效:检查资源策略是否包含所有必填字段。有关更多信息,请参阅 IAM JSON 策略元素参考IAM 策略验证。您还可以使用 IAM 策略生成器来创建和测试 Amazon SQS 资源策略。确保策略采用 JSON 格式。

  • 主体无效:确保资源策略中存在 Principal 元素并且其值有效。如果您的 Amazon SQS 资源策略中的 Principal 元素包含 IAM 实体,则在使用该策略之前,请确保该实体已经存在。Amazon SQS 会验证资源策略并检查 IAM 实体是否存在。如果 IAM 实体不存在,您会收到错误。要确认 IAM 实体,可以使用 GetRoleGetUser API。

有关针对 InvalidAttributeValue 错误进行问题排查的更多信息,请参阅《Amazon Knowledge Center 指南》中的“如何解决对 Amazon SQS 队列进行 API 调用时出现的 QueueDoesNotExist 错误?”

ReceiptHandle 错误

发出 DeleteMessage API 调用时,如果接收句柄不正确或已过期,则系统可能会返回 ReceiptHandleIsInvalidInvalidParameterValue 错误。

  • ReceiptHandleIsInvalid 错误:如果接收句柄不正确,您会收到类似以下示例的错误:

    An error occurred (ReceiptHandleIsInvalid) when calling the DeleteMessage operation: The input receipt handle <YOUR RECEIPT HANDLE> is not a valid receipt handle.
  • InvalidParameterValue 错误:如果接收句柄已过期,您会收到类似以下示例的错误:

    An error occurred (InvalidParameterValue) when calling the DeleteMessage operation: Value <YOUR RECEIPT HANDLE> for parameter ReceiptHandle is invalid. Reason: The receipt handle has expired.

可能的原因和缓解措施:

系统会为每条收到的消息创建接收句柄,并且接收句柄仅在可见性超时时间内有效。当可见性超时时间到期时,消息将在队列中对使用者可见。当您再次收到使用者发送的消息时,会收到一个新的接收句柄。为防止出现接收句柄不正确或过期的错误,请使用正确的接收句柄在 Amazon SQS 队列可见性超时时间内删除消息。

有关如何针对 ReceiptHandle 错误进行问题排查的更多信息,请参阅《Amazon Knowledge Center 指南》中的“当我使用 Amazon SQS DeleteMessage API 调用时,如何排除‘ReceiptHandleIsInvalid’或‘InvalidParameterValue’错误?”