SQS get_queue_by_name 在 AWS Lambda 中找不到队列

nad*_*nad 5 amazon-sqs aws-lambda

我正在尝试从 AWS lambda 写入 SQS 队列,如下所示。

sqs = boto3.resource(
        'sqs',
        region_name='us-east-1'
    )

def lambda_handler(event, context):
    queue_name = event["queue_name"]
    sqsQ = sqs.get_queue_by_name(QueueName=queue_name)
    msg_body = {
            "source": "some_source",
            "mse": 120
        }
    msg = sqsQ.send_message(MessageBody=json.dumps(msg_body), MessageGroupId="some_id", MessageDeduplicationId=str(uuid.uuid4()))
Run Code Online (Sandbox Code Playgroud)

但我收到队列不存在错误

"errorMessage": "An error occurred (AWS.SimpleQueueService.NonExistentQueue) when calling the GetQueueUrl operation: The specified queue does not exist or you do not have access to it.",
  "errorType": "QueueDoesNotExist",
Run Code Online (Sandbox Code Playgroud)

我确保队列名称正确(复制粘贴)并且它是正确的区域。

我缺少什么?

ami*_*ttn 7

  • 值得检查的是 Lambda 具有以下权限来管理 Amazon SQS 队列中的消息。将它们添加到函数的执行角色中。 sqs:ReceiveMessage, sqs:DeleteMessage, sqs:GetQueueAttributes. AWS 文档
def get_msg_from_sqs():
    sqs_client = boto3.client('sqs')

    print("--- Getting message from SQS")
    response = sqs_client.receive_message(
        QueueUrl="https://sqs.eu-west-2.amazonaws.com/0000000000/manual_test_to_mesage_sender_queue",
        MaxNumberOfMessages=10,
        WaitTimeSeconds=10
    )

    print("--- Full Response:")
    print(response)

    messages = response.get('Messages')
    for message in messages:
        body = message.get('Body')
        json_body = json.loads(body)
        message = json_body.get('Message')
        json_msg = json.loads(message)

        print("--- Message:")
        print(json_msg.get('number'))
        print(json_msg.get('session_id'))
Run Code Online (Sandbox Code Playgroud)

  • 通过这种方式传递 QueueURL 可以,但我们无法传递 URL。我们必须使用队列名称来完成此操作 (2认同)