使用Dynamodb和SNS lambda函数 - 超时(Lambda function using

2019-09-28 08:18发布

我试图用一个DynamoDb项目值在SNS服务发送通知。 它与超时错误,无法从不过取Dynamodb成功并且被发送通知。 但它不断重试和超时处理多次后。

{ “的errorMessage”: “2018-01-02T10:14:55.463Z c18d142e-efa5-11e7-8671-7f3af13c58c7任务后10.01秒超时”}

现在,我也使用参数尝试context.callbackWaitsForEmptyEventLoop = false ,但力帮助很大! 好像我没有正确使用它。

下面是一段代码,可以有人请帮助:

exports.handler = function (event, context, callback) {

var AWS = require('aws-sdk');
var doc = require('dynamodb-doc');
var dynamodb = new doc.DynamoDB();

var params = {    
TableName : 'abcmsg',
ProjectionExpression: 'Message',
  Key : { 
   "ind" : "ABC10"
    }
};

var MESSAGE_ID = getmsg();

function getmsg(MESSAGE_ID) {
dynamodb.getItem(params, function (err, data) {
        if (err) {
             console.log('ERROR: Dynamo Failed:', err);
             getmsg(err);
        } else {
               console.log('Dynamo Success: ' + JSON.stringify(data, null, '  ')); 
               let MESSAGE_ID = data['Item'].Message;
               console.log('data',data['Item'].Message); 
               getmsg(MESSAGE_ID);        
        }
});


console.log('MESSAGE_ID',MESSAGE_ID); //print the correct value 'ABCD'

var sns = new AWS.SNS({
      region:'eu-west-1',
      maxRetries: 0

});

sns.publish({
Message: MESSAGE_ID,
Subject:"Test Message",
TopicArn:"arn:aws:sns:eu-west-1:0123456789012:Lambda"
}, function (err, data) {
if (err) {
console.log(err.stack);
return;
}
console.log('push sent');
});

callback(null,{ "statusCode": 200 });
context.callbackWaitsForEmptyEventLoop = false;

}

};

日志:-----

2018-01-02T10:14:55.005Z c18d142e-efa5-11e7-8671-7f3af13c58c7发电机成功:{ “物品”:{ “消息”: “ABCD”}} 2018-01-02T10:14:55.005Z c18d142e-efa5 -11e7-8671-7f3af13c58c7数据ABCD 2018-01-02T10:14:55.006Z c18d142e-efa5-11e7-8671-7f3af13c58c7 MESSAGE_ID ABCD 2018-01-02T10:14:55.028Z c18d142e-efa5-11e7-8671-7f3af13c58c7推送到2018-01-02T10:14:55.086Z c18d142e-efa5-11e7-8671-7f3af13c58c7发电机成功:{ “物品”:{ “消息”: “ABCD”}} 2018-01-02T10:14:55.105Z c18d142e-efa5 -11e7-8671-7f3af13c58c7数据ABCD 2018-01-02T10:14:55.106Z c18d142e-efa5-11e7-8671-7f3af13c58c7 MESSAGE_ID ABCD 2018-01-02T10:14:55.127Z c18d142e-efa5-11e7-8671-7f3af13c58c7推送到2018-01-02T10:14:55.167Z c18d142e-efa5-11e7-8671-7f3af13c58c7发电机成功:{ “物品”:{ “消息”: “ABCD”}} 2018-01-02T10:14:55.185Z c18d142e-efa5 -11e7-8671-7f3af13c58c7数据ABCD 2018-01-02T10:14:55.186Z c18d142e-efa5-11e7-8671-7f3af13c58c7 MESSAGE_ID ABCD 2018-01-02T10:14:55.226Z c18d142e-efa5-11e7-8671-7f3af13c58c7推森 吨2018-01-02T10:14:55.253Z c18d142e-efa5-11e7-8671-7f3af13c58c7发电机成功:{ “物品”:{ “消息”: “ABCD”}} 2018-01-02T10:14:55.265Z c18d142e- efa5-11e7-8671-7f3af13c58c7数据ABCD 2018-01-02T10:14:55.285Z c18d142e-efa5-11e7-8671-7f3af13c58c7 MESSAGE_ID ABCD 2018-01-02T10:14:55.306Z c18d142e-efa5-11e7-8671-7f3af13c58c7推发送2018-01-02T10:14:55.345Z c18d142e-efa5-11e7-8671-7f3af13c58c7发电机成功:{ “物品”:{ “消息”: “ABCD”}} 2018-01-02T10:14:55.365Z c18d142e- efa5-11e7-8671-7f3af13c58c7数据ABCD 2018-01-02T10:14:55.366Z c18d142e-efa5-11e7-8671-7f3af13c58c7 MESSAGE_ID ABCD 2018-01-02T10:14:55.386Z c18d142e-efa5-11e7-8671-7f3af13c58c7推发送2018-01-02T10:14:55.406Z c18d142e-efa5-11e7-8671-7f3af13c58c7推送到2018-01-02T10:14:55.445Z c18d142e-efa5-11e7-8671-7f3af13c58c7迪纳摩成功:{ “项目”:{ “消息”: “ABCD”}} 2018-01-02T10:14:55.445Z c18d142e-efa5-11e7-8671-7f3af13c58c7数据ABCD END的requestId:c18d142e-efa5-11e7-8671-7f3af13c58c7 REPORT的requestId:c18d 142E-efa5-11e7-8671-7f3af13c58c7时间:10010.15毫秒帐单时间:10000毫秒内存大小:128 MB最大内存使用:44 MB
2018-01-02T10:14:55.463Z c18d142e-efa5-11e7-8671-7f3af13c58c7任务10.01秒后超时

Answer 1:

看起来你正在试图获得与键值项"ind" : "ABC10" ,并使用SNS通知。

在这种情况下, sns.publish应该成功的被称为getItem即代替getmsg(MESSAGE_ID)sns publish function应该被称为(即你需要创建一个发布的消息)或sns publish code block应该被执行(即只复制并粘贴SNS发布的getItem else部分内部代码块)。

我不明白为什么要调用的getMsg(ERR)或的getMsg(MESSAGE_ID)(上的getItem成功IE)(上的getItem错误即期间)? 我认为这是正确的。 它基本上是调用的getItem在一个循环导致超时错误。



文章来源: Lambda function using Dynamodb and SNS - timed out