0

我已经构建了一个AWS Lambda部署包(使用Node.js),该对象在PUT成为指定S3存储桶。现在,我配置了执行的代码,将10个随机生成的记录添加到Kinesis Firehose流中。Node.js中的代码AWS Lambda包不会调用putRecord()将数据添加到AWS Kinesis Firehose流

除了将记录添加到Kinesis流中外,Lambda函数还可以工作。我在AWS CloudWatch日志中看不到任何错误消息。使用console.log()打印语句,似乎putRecord()调用甚至没有执行,我找不到原因。其他人可以弄清楚这一点吗?

下面是我的lambda表达式部署包的分开代码:

console.log('Loading function'); 

var aws = require('aws-sdk'); 
var s3 = new aws.S3({ apiVersion: '2006-03-01' }); 
var zlib = require('zlib'); 

function _writeToKinesis(kinesis) { 
    var currTime = new Date().getMilliseconds(); 
    var sensor = 'sensor-' + Math.floor(Math.random() * 100000); 
    var reading = Math.floor(Math.random() * 1000000); 

    var record = JSON.stringify({ 
     time : currTime, 
     sensor : sensor, 
     reading : reading 
    }); 

    console.log("record: " + record); 

    var recordParams = { 
     Data : record, 
     PartitionKey : sensor, 
     StreamName : "my_firehose" 
    }; 

    console.log("recordParams: " + recordParams); 

    kinesis.putRecord(recordParams, function(err, data) { 
     console.log("test"); 
     if (err) { 
     console.log(err); 
     } 
     else { 
     console.log('Successfully sent data to Kinesis.'); 
     } 
    }); 
} 

exports.handler = function(event, context) { 
    //console.log('Received event:', JSON.stringify(event, null, 2)); 

    // Get the object from the event and show its content type 
    var record = event.Records[0]; 
    var bucket = record.s3.bucket.name; 
    var key = record.s3.object.key; 
    var params = { 
     Bucket: bucket, 
     Key: key 
    }; 

    s3.getObject(params, function(err, data) { 
     if (err) { 
      console.log(err); 
      var message = "Error getting object " + key + " from bucket " + bucket + 
       ". Make sure they exist and your bucket is in the same region as this function."; 
      console.log(message); 
      context.fail(message); 
     } else { 

      console.log('CONTENT TYPE:', data.ContentType); 

      var kinesis = new aws.Kinesis({ apiVersion: '2013-12-02', region : "us-east-1"}); 

      var count = 0; 
      while (count < 10) { 
       setTimeout(_writeToKinesis(kinesis), 1000); 
       count++; 
      } 

      context.succeed("OK");    
     } 
    }); 
}; 

而这里的CloudWatch的日志输出:

START RequestId: c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 Version: $LATEST 
2015-10-18T20:13:59.743Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 CONTENT TYPE: application/zip 
2015-10-18T20:13:59.861Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 record: {"time":860,"sensor":"sensor-12149","reading":146264} 
2015-10-18T20:13:59.861Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 recordParams: [object Object] 
2015-10-18T20:13:59.980Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 record: {"time":924,"sensor":"sensor-86345","reading":956735} 
2015-10-18T20:13:59.980Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 recordParams: [object Object] 
2015-10-18T20:13:59.982Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 record: {"time":982,"sensor":"sensor-4925","reading":822265} 
2015-10-18T20:13:59.982Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 recordParams: [object Object] 
2015-10-18T20:14:00.060Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 record: {"time":60,"sensor":"sensor-40822","reading":796150} 
2015-10-18T20:14:00.060Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 recordParams: [object Object] 
2015-10-18T20:14:00.061Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 record: {"time":61,"sensor":"sensor-92861","reading":855213} 
2015-10-18T20:14:00.061Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 recordParams: [object Object] 
2015-10-18T20:14:00.063Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 record: {"time":63,"sensor":"sensor-84324","reading":155159} 
2015-10-18T20:14:00.063Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 recordParams: [object Object] 
2015-10-18T20:14:00.121Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 record: {"time":121,"sensor":"sensor-54930","reading":365471} 
2015-10-18T20:14:00.121Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 recordParams: [object Object] 
2015-10-18T20:14:00.122Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 record: {"time":122,"sensor":"sensor-1330","reading":981637} 
2015-10-18T20:14:00.122Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 recordParams: [object Object] 
2015-10-18T20:14:00.123Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 record: {"time":123,"sensor":"sensor-92245","reading":634723} 
2015-10-18T20:14:00.123Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 recordParams: [object Object] 
2015-10-18T20:14:00.161Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 record: {"time":161,"sensor":"sensor-29594","reading":227706} 
2015-10-18T20:14:00.161Z c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 recordParams: [object Object] 
END RequestId: c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 
REPORT RequestId: c3f9e9d3-75d4-11e5-a597-f7dcab9cd666 Duration: 1258.07 ms Billed Duration: 1300 ms Memory Size: 128 MB Max Memory Used: 15 MB 

"OK" 

附:我有一个与Lambda函数关联的IAM角色,该角色配置了策略以从S3读取以及写入Kinesis。

+0

我注意到每一对执行(不是所有的执行),日志输出是不同的,并且包含以下错误: [ResourceNotFoundException:在帐户8下流my_firehose ********** *未找到。] 我不确定为什么 - 流已创建且处于活动状态... – littleK

回答

0

我想出了这个问题,当我尝试执行listStreams()。它只打印出Kinesis流,而不是流水流。我曾假设,在API中,Firehose是在Kinesis伞下。然而,Firehose是它自己独立的API。

此外,我遇到了另一个问题,有一个解决办法发布在这里:Running AWS Firehose in lambda.js gives an undefined error。目前,如果您将Firehose API与Lambda一起使用,则需要在Lambda函数部署包(npm install aws-sdk)中包含aws-sdk模块。显然有一张为亚马逊创建的门票来解决这个问题。

相关问题