Создание очереди AWS SQS

Я пытаюсь создать очередь SQS на AWS из экземпляра EC2 с помощью node.js. Из того же экземпляра я могу получить доступ к S3 и составить список сегментов и т. Д. С помощью node.js. Экземпляр имеет роль IAM, предоставляющую полный доступ к S3 и SQS.

Однако выполнение приведенного ниже кода не удается, и я не могу понять, почему. Еще более интересно то, что на моем ПК код действительно работает.

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());
});

Как это можно объяснить?


person jallmer    schedule 25.04.2016    source источник
comment
Вы пробовали указать версию api? Нравится new AWS.SQS({apiVersion: '2012-11-05'});   -  person John    schedule 26.04.2016
comment
Нет, но на экземпляре установлена ​​только последняя версия (2.3.5). Я все же пытался использовать 1.0.0, но безрезультатно.   -  person jallmer    schedule 26.04.2016
comment
Пробовал с {apiVersion: '2012-11-05'}, но снова безуспешно.   -  person jallmer    schedule 26.04.2016


Ответы (1)


Похоже, это связано с другой версией узла, установленной на сервере Ubuntu, и версией вашего локального компьютера.

Что node --version вы используете локально или на своем сервере?

person Nathan    schedule 13.09.2016