

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

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

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

## QueueDoesNotExist 错误
<a name="queuedoesnotexist-error"></a>

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

**可能的原因和缓解措施：**
+ **区域不正确：**查看 Amazon SQS 客户端配置，确认您在客户端上配置了正确的区域。如果您没有在客户端上配置区域，SDK 或 Amazon CLI 会从[配置文件](https://docs.amazonaws.cn/cli/latest/userguide/cli-configure-files.html)或环境变量中选择区域。如果 SDK 在配置文件中找不到区域，则默认情况下，SDK 会将区域设置为 us-east-1。
+ **队列最近可能被删除：**如果队列在 API 调用之前已经被删除，那么 API 调用将返回此错误。查看 CloudTrail，确认在错误发生前是否有任何 [DeleteQueue](https://docs.amazonaws.cn/AWSSimpleQueueService/latest/APIReference/API_DeleteQueue.html) 操作。
+ **权限问题：**如果发出请求的 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 错误？”](https://repost.aws/knowledge-center/sqs-queuedoesnotexist-errors)。

## InvalidAttributeValue 错误
<a name="invalidattributevalue-error"></a>

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

**可能的原因和缓解措施：**
+ **资源策略无效：**检查资源策略是否包含所有必填字段。有关更多信息，请参阅 [IAM JSON 策略元素参考](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements.html)和 [IAM 策略验证](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_policy-validator.html)。您还可以使用 [IAM 策略生成器](https://docs.amazonaws.cn/IAM/latest/UserGuide/access-analyzer-policy-generation.html)来创建和测试 Amazon SQS 资源策略。确保策略采用 JSON 格式。
+ **主体无效：**确保资源策略中存在 `Principal` 元素并且其值有效。如果您的 Amazon SQS 资源策略中的 `Principal` 元素包含 IAM 实体，则在使用该策略之前，请确保该实体已经存在。Amazon SQS 会验证资源策略并检查 IAM 实体是否存在。如果 IAM 实体不存在，您会收到错误。要确认 IAM 实体，可以使用 [https://docs.amazonaws.cn/IAM/latest/APIReference/API_GetRole.html](https://docs.amazonaws.cn/IAM/latest/APIReference/API_GetRole.html) 和 [https://docs.amazonaws.cn/IAM/latest/APIReference/API_GetUser.html](https://docs.amazonaws.cn/IAM/latest/APIReference/API_GetUser.html) API。

有关针对 `InvalidAttributeValue` 错误进行问题排查的更多信息，请参阅《Amazon Knowledge Center 指南》**中的[“如何解决对 Amazon SQS 队列进行 API 调用时出现的 QueueDoesNotExist 错误？”](https://repost.aws/knowledge-center/sqs-invalid-parameter-policy)。

## ReceiptHandle 错误
<a name="receipthandle-error"></a>

发出 [https://docs.amazonaws.cn/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html](https://docs.amazonaws.cn/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html) API 调用时，如果接收句柄不正确或已过期，则系统可能会返回 `ReceiptHandleIsInvalid` 或 `InvalidParameterValue` 错误。
+ **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’错误？”](https://repost.aws/knowledge-center/sqs-receipt-handle-error)。