从S3文件读取JSON并使用带有NodeJS运行时的Lambda将logging插入到dynamoDB中

我的DynamoDB表具有以下分区键:

UserId String 

这是我的Lambda函数:

 'use strict'; console.log('Loading function'); const doc = require('dynamodb-doc'); const dynamo = new doc.DynamoDB(); var AWS = require('aws-sdk'); var S3 = new AWS.S3({ maxRetries: 0, region: 'us-east-1', }); var insertSuccess = 0; var insertErrors = 0; function dynamoResultCallback(err, data) { if (err) { insertErrors++; console.log("Insert Error: \n"); console.log(err, err.stack); // an error occurred } else { insertSuccess++; } } exports.handler = (event, context, callback) => { console.log('Received event:', JSON.stringify(event, null, 2)); console.log("Init complete, running.. \n") var srcBucket = event.Records[0].s3.bucket.name; var srcKey = event.Records[0].s3.object.key; console.log("Params: srcBucket: " + srcBucket + " srcKey: " + srcKey + "\n") S3.getObject({ Bucket: srcBucket, Key: srcKey, }, function(err, data) { if (err !== null) { return callback(err, null); } var fileData = data.Body.toString('utf-8'); var recordsArray = fileData.split("\n"); for (var i = 0; i < recordsArray.length; i++) { var record = recordsArray[i]; console.log("Inserting record: " + record); var params = { Item: record, ReturnConsumedCapacity: "TOTAL", TableName: "PacketData" }; dynamo.putItem(params, dynamoResultCallback); } console.log("Insert Result -- successCount: " + insertSuccess + " errorCount: " + insertErrors) return callback(null, data); }); }; 

目前发生的情况是,它按预期的方式读取S3文件,但是我无法将生成的logging传递到发电机,云监视日志错误是它没有通过UserId(所需的parition键),尽pipe它在数据中。 这些logging在CloudWatch中打印得很好,实际上,如果我replace此行上的loggingvariables:

 Item: record, 

使用来自CloudWatch的JSONstring,它按预期工作。 有什么build议么?

PS我是一个JavaScript新手,如果这不是已经很明显,但我相信这个问题是由于如何variableslogging被解释在运行时,因为它工作正常,如果我把它的价值作为硬编码stringreplace该variables。

使用JSON.parse(record);

根据dynamodb-doc 文档 ,putItem方法需要一个对象而不是string。