cos*_*r11 4 amazon-sqs amazon-web-services node.js aws-lambda
以下内容对我不起作用的一些可能原因是什么?
card_auth_events至少包含一个id字段的 DynamoDB 表。 console.log('Loading publishCardAuthEvent...');
var QUEUE_URL = 'https://sqs.us-west2.amazonaws.com/XXXXXXXXXXXX/CardAuthEvents';
var AWS = require('aws-sdk');
var sqs = new AWS.SQS({region : 'us-west-2'});
var http = require('https');
exports.handler = function(event, context) {
event.Records.forEach(function(record) {
console.log(record.eventID);
console.log(record.eventName);
console.log('DynamoDB Record: %j', record.dynamodb);
sendToQueue(record);
});
context.succeed("Successfully processed " + event.Records.length + " records.");
};
function sendToQueue(message){
//Send SQS message with details of file uploaded to S3.
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
}
});
}
Run Code Online (Sandbox Code Playgroud)
配置LAMBDA有一个角色AmazonSQSFullAccess,AmazonDynamoDBFullAccess和AmazonAppStreamFullAccess。
在 SQS 中创建队列
在表中插入一条记录。
触发器被调用,但为什么消息没有放入队列???
队列中没有消息,Cloud Watch 中也没有错误。有什么我遗漏的秘密吗?
我认为问题在于您正在调用您的sendToQueue()函数,然后在context.succeed()不等待生成的 SQS API 调用完成的情况下调用。这是在完成之前终止您的 Lambda 函数。
一旦你解决了这个问题,另一个问题是你context.done()在 SQS 回调内部调用,但你可能会调用sendToQueue()多次。一旦第一个 SQS API 调用返回,您的 Lambda 函数就会终止。