【发布时间】:2020-08-06 01:00:33
【问题描述】:
我正在尝试使用基本的客户端-服务器基础架构构建应用程序。服务器基础设施托管在 AWS 上,当客户端登录时,它会向服务器发送一条消息以设置各种基础设施注意事项。其中一个基础设施是一个 SQS 队列,客户端可以从中轮询以从服务器获取更新(最终我想构建一个推送服务,但我现在不知道如何做)。
我正在使用 Node AWS 开发工具包在 NodeJS 中构建此应用程序。我遇到的问题是我需要队列 ARN 来执行各种操作,例如将 SQS 队列订阅到应用程序使用的 SNS 主题,但创建队列 API 返回队列 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 */
}
谢谢!
【问题讨论】:
-
你试过
All而不是QueueArn,它返回了什么? -
我尝试了 'All'、['All']、['QueueArn'] 和 'QueueArn'。所有这些都返回未定义。
-
您是否尝试在现有队列上调用
getQueueAttributes- 我的意思是如果 aws 正在异步创建队列,那么即使createQueue完成,您也可能无法取回它。 -
是的,我尝试创建队列,然后从 AWS 控制台注释掉创建队列部分并在队列 URL 中硬编码。那也没用。顺便说一句,因为这可能是您的下一个问题,所以我确实尝试从控制台使用 AWS CLI,并且效果很好。
-
yes :) - 这个 lambda 的执行角色怎么样 - 这个 lambda 的角色允许访问 SQS 吗?
标签: node.js aws-sdk amazon-sqs aws-sdk-js aws-sdk-nodejs