Boto3 - sqs get_queue_url 结果在 QueueDoesNotExist

w--*_*w-- 0 amazon-sqs boto3

我正在尝试从 SQS 队列中读取。为此,我需要获取队列 url。这是我的代码

    sts = boto3.client('sts')
    print('running as:')
    pp.pprint(sts.get_caller_identity())

    sqs = boto3.client('sqs')
    queue_name = settings.SQS_JOBS_TASK_RESULTS_QUEUE
    print('getting queue_name: ', queue_name)
    res = sqs.get_queue_url(QueueName=queue_name)
Run Code Online (Sandbox Code Playgroud)

从上面的代码你可以看到我也在验证我的身份。

sqs.get_queue_url 总是失败

botocore.errorfactory.QueueDoesNotExist:调用 GetQueueUrl 操作时发生错误 (AWS.SimpleQueueService.NonExistentQueue):指定的队列不存在或您无权访问它。

我已经从 aws Web 控制台复制粘贴了队列名称。仍然失败。

我知道我的权限没问题,因为如果我跳过这一步,从 web 控制台复制粘贴 url 并直接跳转到读取和写入队列,它可以工作。

我在这里缺少什么?

w--*_*w-- 12

在我写这个问题时,我得到了一个灯泡,可能有获取队列 url 的特定权限。

瞧,确保您不要忘记添加sqs:GetQueueUrl您的政策。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sqs:GetQueueAttributes",
                "sqs:SendMessage",
                "sqs:ReceiveMessage",
                "sqs:DeleteMessage",
                "sqs:DeleteMessageBatch",
                "sqs:GetQueueUrl"
            ],
            "Resource": "arn:aws:sqs:xxxxxxxxx"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)