创建 AWS SQS 队列

Posted

技术标签:

【中文标题】创建 AWS SQS 队列【英文标题】:Creating an AWS SQS queue 【发布时间】:2016-08-18 14:21:29 【问题描述】:

我正在尝试使用 node.js 从 EC2 实例在 AWS 上创建 SQS 队列。 在同一个实例中,我可以使用 node.js 访问 S3 并列出存储桶等。该实例具有授予对 S3 和 SQS 的完全访问权限的 IAM 角色。

但是执行下面的代码失败了,我不知道为什么。更有趣的是,在我的电脑上,代码实际上可以工作。

var AWS = require('aws-sdk');
AWS.config.update(region:'eu-central-1');
//console.log("awsv "+AWS.VERSION); --> 2.3.5
var sqs = new AWS.SQS();
 var params = 
  QueueName: "MyQueue1"
 ;
 sqs.createQueue(params, function(err, data) 
   if (err) console.log(err, err.stack); // an error occurred
   else 
        if(data)
                console.log(data);           // successful response
        else
                console.log("Other unknown error");
   
 );

错误信息:

/home/ubuntu/aws-nodejs-sample/node_modules/aws-sdk/lib/http/node.js:121
      callback();
      ^
TypeError: undefined is not a function
    at Writable.writer._write (/home/ubuntu/aws-nodejs-sample/node_modules/aws-sdk/lib/http/node.js:121:7)
    at Writable.write (_stream_writable.js:176:8)
    at write (_stream_readable.js:481:24)
    at Array.forEach (native)
    at flow (_stream_readable.js:493:19)
    at _stream_readable.js:458:7
    at process._tickCallback (node.js:427:13)
    at process._makeCallback (node.js:345:15)

事实证明,使用调用 CLI 函数的脚本进行快速测试确实有效:

var AWS = require('aws-sdk');
AWS.config.region = 'eu-central-1';

var qUrl="https://sqs.eu-central-1.amazonaws.com/......./awsquerytest";

var queue = new AWS.SQS(params: QueueUrl: qUrl); // using url to queue
var receipthandle;
var fs = require('fs');

var child = require('child_process').exec('aws sqs receive-message --queue-url https://sqs.eu-central-1.amazonaws.com/....../awsquerytest');
child.stdout.on('data', function(data) 
   var x= data.toString();
   console.log(data.toString());
   fs.writeFile("/home/ubuntu/aws-nodejs-sample/output",x,function(err)
if(err)
return console.log(err);

console.log("oldu");
);
);

child.stderr.on("data", function (data) 
    console.log(data.toString());
);

如何解释?

【问题讨论】:

你试过指定api版本吗?喜欢new AWS.SQS(apiVersion: '2012-11-05'); 否,但实例上仅安装了最新版本 (2.3.5)。不过,我确实尝试使用 1.0.0,但无济于事。 尝试使用 apiVersion: '2012-11-05' 但还是没有运气。 【参考方案1】:

看起来这与您在 Ubuntu 服务器上安装的节点版本与您的本地计算机上的不同版本有关。

node --version 是在本地运行还是在服务器上运行?

【讨论】:

以上是关于创建 AWS SQS 队列的主要内容,如果未能解决你的问题,请参考以下文章

AWS SAM 模板 - 定义由 API Gateway 触发的 SQS 队列

AWS SQS - CDK - 如何创建主题过滤器

使用SQS接收SES消息

防止 spring-cloud-aws-messaging 尝试停止队列

如何从外部 SQS 队列活动触发 AWS Lambda 函数

当消息存在于 SQS 队列中时触发 AWS 中的 Lambda 函数