如何在 nodeJS 中获取 AWS SQS 队列 ARN?

How to get AWS SQS queue ARN in nodeJS?

我正在尝试构建具有基本客户端-服务器基础结构的应用程序。服务器基础设施托管在 AWS 上,当客户端登录时,它会向服务器发送消息以设置各种基础设施注意事项。其中一个基础设施是一个 SQS 队列,客户端可以从中进行轮询以从服务器获取更新(最终我想构建一个推送服务,但我现在不知道怎么做)。

我正在使用 Node AWS SDK 在 NodeJS 中构建此应用程序。我遇到的问题是我需要队列 ARN 来做各种事情,比如将 SQS 队列订阅到应用程序使用的 SNS 主题,但是创建队列 API returns 队列 URL,不是 ARN。因此,我可以使用 getQueueAttributes API 从 URL 获取 ARN,但它似乎不起作用。每当我调用它时,我都会得到未定义的响应。这是我的代码,请告诉我我做错了什么:

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 */
}

谢谢!

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);
};

它打印了

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

在 Ersoy 的帮助下,我意识到我正在使用块格式(使用 {})来编写我的 Promise,但我从未 return 从这些块中提取任何内容。我原以为 Promise 块中的最后一个值默认是 return 值,但似乎并非如此。当我在 SQS API 命令之前添加 return 时,它起作用了(不使用 async/await)。