如何在 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)。
我正在尝试构建具有基本客户端-服务器基础结构的应用程序。服务器基础设施托管在 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)。