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

问题描述 投票:0回答:1

我试图构建一个具有基本客户端-服务器基础设施的应用程序。 服务器基础设施托管在AWS上,当客户端登录时,它会向服务器发送消息,以设置各种基础设施的考虑。 其中一个基础架构是一个SQS队列,客户端可以从这个队列中轮询以获得服务器的更新(最终我想建立一个推送服务,但现在我不知道如何做)。

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

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

谢谢!

node.js aws-sdk amazon-sqs aws-sdk-js aws-sdk-nodejs
1个回答
2
投票
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' } }


1
投票

在Ersoy的帮助下,我意识到我使用块格式化(用{})来写我的Promise,但我从来没有从这些块中返回任何东西。 我曾以为Promise块中的最后一个值是默认的返回值,但似乎并非如此。 当我在Promise块中添加了 return SQS API命令前,然后就可以了(不使用asyncawait)。

© www.soinside.com 2019 - 2024. All rights reserved.