Я попытался импортировать данные из CSV-файла, хранящегося в S3, и поместить данные в таблицу DynamaDB.В моей функции Lambda, которая находится в node.js, все работает нормально, мои данные хорошо экспортируются.
Я попытался выяснить, не было ли это проблемы с моим Item, поэтому я поместил параметры var в началефункция (до s3.getObjet) и данные были помещены в мою таблицу DynamoDB.Кроме того, я попытался выяснить, была ли моя проблема в моем if, но в случае if ни один console.log не работал нормально.Я думаю, единственная проблема - это мой код, и я думаю, что это проблема области видимости?
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");
}
};
Спасибоза вашу помощь!