[英]How to get AWS SQS queue ARN in nodeJS?
我正在嘗試使用基本的客戶端-服務器基礎結構構建應用程序。 服務器基礎設施托管在 AWS 上,當客戶端登錄時,它會向服務器發送消息以設置各種基礎設施注意事項。 其中一個基礎設施是一個 SQS 隊列,客戶端可以從中進行輪詢以從服務器獲取更新(最終我想構建一個推送服務,但我現在不知道怎么做)。
我正在使用節點 AWS SDK 在 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 */
}
謝謝!
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,但我從未從這些塊中返回任何東西。 我原以為Promise塊中的最后一個值是默認的返回值,但似乎並非如此。 當我在 SQS API 命令之前添加return
時,它就起作用了(不使用異步/等待)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.