Как получить AWS SQS очереди ARN в nodeJS? - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь создать приложение с базовой c клиент-серверной инфраструктурой. Инфраструктура сервера размещена на AWS, и когда клиент входит в систему, он отправляет сообщение на сервер, чтобы настроить различные аспекты инфраструктуры. Одним из элементов инфраструктуры является очередь SQS, с которой клиент может опросить, чтобы получать обновления с сервера (в конечном итоге я хотел бы создать службу pu sh, но сейчас я не знаю, как это сделать).

Я создаю это приложение в NodeJS, используя Node AWS SDK. Проблема, с которой я столкнулся, заключается в том, что мне нужно, чтобы очередь ARN выполняла различные действия, такие как подписка очереди SQS на SNS topi c, который использует приложение, но API создания очереди возвращает URL-адрес очереди, а не ARN. Поэтому я могу получить ARN из URL-адреса с помощью API getQueueAttributes, но, похоже, он не работает. Всякий раз, когда я звоню, я получаю неопределенный ответ. Вот мой код, скажите, пожалуйста, что я делаю не так:

exports.handler = (event, context, callback) => {

    new aws.SQS({apiVersion: '2012-11-05'}).createQueue({
            QueueName: event.userId
        }).promise()
    )
    .then(data => { /* This has the Queue URL */
        new aws.SQS({apiVersion: '2012-11-05'}).getQueueAttributes({
            QueueUrl: data.QueueUrl,
            AttributeNames: ['QueueArn']
        }).promise()
    })
    .then(data => {
        console.log(JSON.stringify(data)); /* prints "undefined" */
    })
/* Some more code down here that's irrelevant */
}

Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020
const AWS = require('aws-sdk');
const sqs = new AWS.SQS();

exports.handler = async(event, context, callback) => {

    var params = {
        QueueUrl: 'my-queue-url',
        AttributeNames: ['QueueArn']
    };

    let fo = await sqs.getQueueAttributes(params).promise();
    console.log(fo);
};

и напечатано

INFO { ResponseMetadata: { RequestId: '123456-1234-1234-1234-12345' }, Attributes: { QueueArn: 'arn:aws:sqs:eu-west-1:12345:my-queue-name' } }

0 голосов
/ 23 апреля 2020

С помощью Ersoy я понял, что использовал блочное форматирование (с {}), чтобы написать свои Обещания, но я никогда не возвращал ничего из этих блоков. Я думал, что последнее значение в блоке Promise было возвращаемым значением по умолчанию, но, похоже, это не так. Когда я добавил return перед командой API SQS, она работала (без использования async / await).

...