我正在从S3下载一组CSV文件到Lambda的'tmp'文件夹。然后,我将文件作为输入输入到C ++可执行文件中,该文件打包在Lambda zip部署中。
Lambda:main.js
exports.handler = function(event) {
process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT']
var bucket = 'test',
fileKey = 'processed/2019-06-25/',
fileNames = ["a.csv", "b.csv", "c.csv"];
try {
s3.download(bucket, fileKey, fileNames)
console.log("tmp after s3 download");
let files = fs.readdirSync('/tmp/');
files.forEach(function (file) {
console.log(file);
});
let result = proc.execSync('./run', {stdio: 'inherit'});
}
catch(e){
console.log(e);
return e;
}
}
S3下载实用程序
downloadFromS3 = function (bucket, fileKey, fileNames) {
'use strict';
console.log('downloading', bucket, fileKey, fileNames);
for (var i = 0; i < fileNames.length; i++) {
var filePath = path.join(os.tmpdir(), fileNames[i]),
file = fs.createWriteStream(filePath),
stream = s3.getObject({
Bucket: bucket,
Key: fileKey + fileNames[i]
}).createReadStream();
stream.pipe(file);
}
}
module.exports = {
download: downloadFromS3
};
这是我的运行文件(calc.exe是lambda zip的一部分)
./calc -d /tmp/
以上命令引发分段错误,但是如果我创建具有相同csv文件的目录“ data”(而不是从s3下载到/ tmp),请使用Lambda代码将其检入并使用,它可以正常工作而不会出现任何错误,因此下面的命令将起作用。
./calc -d ./data
我确实验证了所有必需的csv文件都已下载到 / tmp ,但是如果使用 / tmp ,它始终会引发分段错误。但是 ./ data 可以正常工作。