以下哪些不适合我的可能原因是什么?
card_auth_events
字段的DynamoDB表id
。 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
}
});
}
将Lambda配置为具有AmazonSQSFullAccess
,AmazonDynamoDBFullAccess
和AmazonAppStreamFullAccess
的角色。
在SQS中创建队列
将记录插入表格。
触发器被调用,但为什么消息没有放入队列?
队列中没有消息,Cloud Watch中没有错误。我错过了一些秘密吗?
答案 0 :(得分:2)
我认为问题在于您正在调用sendToQueue()
函数,然后调用context.succeed()
而不等待生成的SQS API调用完成。这是在Lambda函数完成之前终止它。
一旦你越过那个,另一个问题是你在SQS回调中调用context.done()
,但你可能多次调用sendToQueue()
。只要第一个SQS API调用返回,您的Lambda函数就会终止。
答案 1 :(得分:1)
问题是您的访问政策。如果您正在使用IAMFullAccess,那么您所做的就是获得lambda访问和更改IAM策略,组,用户等的权限。您需要授予lambda访问SQS的权限。如果您想完全测试lambda,我建议您使用托管策略:AWSLambdaFullAccess
和AmazonSQSFullAccess
。这将打开S3,Lambda,DynamoDb,SQS和Cloudwatch。