【发布时间】:2019-02-15 03:54:55
【问题描述】:
我尝试从存储在 S3 中的 csv 文件导入数据,并将数据放入 DynamaDB 表中。在 node.js 中的 Lambda 函数中,一切正常,我的数据导出良好。
我试图查看我的 Item 是否有问题,因此我将 var 参数放在函数的开头(在 s3.getObjet 之前),并将数据放入我的 dynamoDB 表中。 另外,我试图查看我的问题是否是我的 if,但没有 console.log 在 if 中正常工作。 我认为,唯一的问题是我的代码,我认为这是一个范围问题?
var AWS = require("aws-sdk"),
documentClient = new AWS.DynamoDB.DocumentClient();
var s3 = new AWS.S3();
exports.handler = function(event, context, callback) {
var src_bkt = event.Records[0].s3.bucket.name;
var src_key = event.Records[0].s3.object.key;
var file;
var lignea;
// Retrieve the object
s3.getObject({
Bucket: src_bkt,
Key: src_key
}, function(err, dataFile) {
if (err) {
console.log(err, err.stack);
callback(err);
} else {
file = dataFile.Body.toString('ascii');
var rows = file.split('\n');
for(var i in rows){
lignea = rows[i].split(';');
if(lignea[2].startsWith('/France/Toulouse/')){
console.log("hey");
var params = {
Item : {
"ASSETTAG" : 'c',
"MAINHOST" : 'c'
},
TableName : process.env.TABLE_NAME
};
documentClient.put(params, function(err, data){
callback(err, data);
});
}
}
}
});
};
编辑:在帮助下,我的异步代码是这样的:
var AWS = require("aws-sdk"),
documentClient = new AWS.DynamoDB.DocumentClient();
var s3 = new AWS.S3();
exports.handler = async function(event, context, callback) {
var src_bkt = event.Records[0].s3.bucket.name;
var src_key = event.Records[0].s3.object.key;
var file;
var lignea;
try{
// Retrieve the object
const dataFile = s3.getObject({
Bucket: src_bkt,
Key: src_key
}).promise();
file = dataFile.Body.toString('ascii');
var rows = file.split('\n');
for(var i in rows){
lignea = rows[i].split(';');
if(lignea[2].startsWith('/France/Toulouse/')){
console.log("hey");
var params = {
Item : {
"ASSETTAG" : 'test1',
"MAINHOST" : 'test2'
},
TableName : process.env.TABLE_NAME
};
await documentClient.put(params).promise();
}
}
}catch(e){
console.error("FAIL");
}
};
感谢您的帮助!
【问题讨论】:
-
尽量使用ES6。你能检查一下你得到的表名吗?
标签: node.js amazon-web-services aws-lambda amazon-dynamodb