Прежде всего, я бы порекомендовал использовать NodeJS 8.10 вместо NodeJs 6.10 (скоро будет EOL, хотя AWS неясно, как долго он будет поддерживаться)
Кроме того, я бы не использовал обработчик старого стиля с обратным вызовом.
Рабочий пример, приведенный ниже - поскольку он загружает файл из Интернета (его не удосуживает создать пакет для развертывания в lambda с загруженным файлом), у него немного больше времени для работы.
const { spawnSync } = require("child_process");
const { readFileSync, writeFileSync, unlinkSync } = require("fs");
const util = require('util');
var fs = require('fs');
let path = require("path");
const https = require('https');
exports.handler = async (event) => {
const source_url = 'https://upload.wikimedia.org/wikipedia/commons/b/b2/Bell-ring.flac'
const target_path = '/tmp/test.flac'
async function downloadFile() {
return new Promise((resolve, reject) => {
const file = fs.createWriteStream(target_path);
const request = https.get(source_url, function(response) {
const stream = response.pipe(file)
stream.on('finish', () => {resolve()})
});
});
}
await downloadFile()
const test = spawnSync(
"/opt/bin/ffprobe",
[
target_path
]
);
console.log(test.output.toString('utf8'))
const response = {
statusCode: 200,
body: JSON.stringify([test.output.toString('utf8')]),
};
return response;
}
NB! В производственном процессе обязательно создайте уникальный временный файл, так как экземпляры, на которых запускается функция Lambda, часто передаются от вызова к вызову, вы не хотите, чтобы множественные вызовы наступали на файлы друг друга! Когда закончите, удалите временный файл, иначе у вас может не хватить свободного места на экземпляре, выполняющем ваши функции. Папка / tmp может занимать 512 МБ, поэтому она может быстро исчерпаться, если вы работаете со многими большими файлами flac