admin管理员组

文章数量:1415673

I am trying to send a message to SQS queue using Lambda:

Here is my code:

var QUEUE_URL = '.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}

Here is my test data (JSON), notice I have defined MessageGroupId there.

{
  "MessageGroupId": "1",
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

I get the following error:

2020-04-16T17:40:37.604Z    fa709a07-0bcd-4b17-a48b-341a984aec88    INFO    error: Fail Send MessageMissingParameter: The request must contain the parameter MessageGroupId.
2020-04-16T17:40:37.661Z    fa709a07-0bcd-4b17-a48b-341a984aec88    ERROR   Invoke Error    {"errorType":"Error","errorMessage":"error","stack":["Error: error","    at _homogeneousError (/var/runtime/CallbackContext.js:13:12)","    at postError (/var/runtime/CallbackContext.js:30:54)","    at done (/var/runtime/CallbackContext.js:57:7)","    at Object.done (/var/runtime/CallbackContext.js:105:16)","    at Response.<anonymous> (/var/task/index.js:13:15)","    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:364:18)","    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)","    at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)"]}

I have looked at: Lambda : Send a message to SQS AND Lambda can't send message to SQS But I did not find an answer.

Any help is apprecaited!

I am trying to send a message to SQS queue using Lambda:

Here is my code:

var QUEUE_URL = 'https://us-west-2.queue.amazonaws./123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}

Here is my test data (JSON), notice I have defined MessageGroupId there.

{
  "MessageGroupId": "1",
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

I get the following error:

2020-04-16T17:40:37.604Z    fa709a07-0bcd-4b17-a48b-341a984aec88    INFO    error: Fail Send MessageMissingParameter: The request must contain the parameter MessageGroupId.
2020-04-16T17:40:37.661Z    fa709a07-0bcd-4b17-a48b-341a984aec88    ERROR   Invoke Error    {"errorType":"Error","errorMessage":"error","stack":["Error: error","    at _homogeneousError (/var/runtime/CallbackContext.js:13:12)","    at postError (/var/runtime/CallbackContext.js:30:54)","    at done (/var/runtime/CallbackContext.js:57:7)","    at Object.done (/var/runtime/CallbackContext.js:105:16)","    at Response.<anonymous> (/var/task/index.js:13:15)","    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:364:18)","    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)","    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)","    at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)"]}

I have looked at: Lambda : Send a message to SQS AND Lambda can't send message to SQS But I did not find an answer.

Any help is apprecaited!

Share Improve this question asked Apr 16, 2020 at 17:50 MamunMamun 2,5448 gold badges32 silver badges45 bronze badges 1
  • 1 remove MessageGroupId from event. your MessageGroupId is going under MessageBody. – Shubham Commented Apr 16, 2020 at 17:59
Add a ment  | 

1 Answer 1

Reset to default 5

If you look in documentation of SQS you can see that:

MessageGroupId - This parameter applies only to FIFO (first-in-first-out) queues.

I assume that you have accidentally created FIFO queue on SQS. So you need that additional parameter. You could modify your code like this:

var QUEUE_URL = 'https://us-west-2.queue.amazonaws./123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL,
    MessageGroupId: "TestGroup"
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}

It doesn't help if you putt your MessageGroupId into event if you didn't take from your event. If you want to receive MessageGroupId from event could could look like this:

var QUEUE_URL = 'https://us-west-2.queue.amazonaws./123456789/ntech-event-processing-dev.fifo';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});

exports.handler = function(event, context) {
  var params = {
    MessageBody: JSON.stringify(event),
    QueueUrl: QUEUE_URL,
    MessageGroupId: event.MessageGroupId
  };
  sqs.sendMessage(params, function(err,data){
    if(err) {
      console.log('error:',"Fail Send Message" + err);
      context.done('error', "ERROR Put SQS");  // ERROR with message
    }else{
      console.log('data:',data.MessageId);
      context.done(null,'');  // SUCCESS 
    }
  });
}

Tutorial that I have found useful is this one.

本文标签: javascriptHow to insert when sending a message to SQS via lambda functionStack Overflow