我正在尝试打开一个 SQS 队列,但出现此错误:
2019-07-09 07:20:31,855 pid 3604 tid 800 ERROR connection <?xml version="1.0
"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Typ
e>Sender</Type><Code>AWS.SimpleQueueService.NonExistentQueue</Code><Message>The
specified queue does not exist or you do not have access to it.</Message><Detail
/></Error><RequestId>fa3bf29c-d5ad-525a-aa55-a70297d241fa</RequestId></ErrorResp
onse>
我已验证队列名称是否正确。
这是我授予 IAM 角色的权限:
IE
"sqs:ChangeMessageVisibility", "sqs:ReceiveMessage", "sqs:SendMessage",
如果我运行以下
aws sqs receive-message --queue-url https://sqs.us-west-2.amazonaws.com/12345678/my-queue
它不会抛出任何异常。
在我的代码中,我使用 boto 连接到 SQS 队列
sqs_conn = boto.sqs.connect_to_region(self.region)
LOG.debug("Getting queue for %s" % queue_name)
return sqs_conn.get_queue(queue_name)
我是否错过了连接到 SQS 队列的任何权限?
首先,我会仔细检查我的应用程序配置是否使用正确的 sqs 名称/区域/帐户设置。
下面是一个示例,您可能需要授予应用程序以使用 SQS 的权限。
这将为您的应用程序提供读/写访问权限,但不提供管理访问权限。
您执行的 aws 命令可能使用您的本地 aws 配置凭据,这就是它没有给出任何错误的原因。
我怀疑这里的主要原因是 boto 在尝试使用它之前首先尝试列出队列。
更多:Amazon SQS API 权限:操作和资源参考
问候。