Наконец я обнаружил, что для обеспечения прав доступа к файлам мне нужно создать zip-пакет в образе док-станции Amazon Linux.Таким образом, вам нужно
npm i lambda-audio
, а затем архивировать node_modules вместе с вашим index.js.Моя zam корневая папка с lambda-пакетом:
node_modules // npm i lambda-audio result
index.js
Рабочее решение для Node 8.10 Runtime с оптимизацией потребления памяти:
process.env["PATH"] = process.env["PATH"] + ":" + process.env["LAMBDA_TASK_ROOT"];
const AWS = require("aws-sdk");
const s3 = new AWS.S3();
const lambdaAudio = require("lambda-audio");
let bucket;
exports.handler = async (event) => {
try {
bucket = event.bucket;
const { inputFileName, outputFileName } = event;
const fs = require("fs");
const inputStream = fs.createWriteStream("/tmp/input.mp3");
await getFileToStream(inputFileName, inputStream);
await lambdaAudio.sox("/tmp/input.mp3 /tmp/output.mp3 <YOUR FILTERS HERE>);
fs.unlinkSync("/tmp/input.mp3"); // removing unused input file
const outputStream = fs.createReadStream("/tmp/output.mp3");
await uploadFileFromStream(outputFileName, outputStream);
}
catch(err) {
// Logging
}
};
let getFileToStream = async function(fileName, writeStream) {
const params = {
Bucket: bucket,
Key: fileName
};
const readStream = s3.getObject(params).createReadStream();
const end = new Promise((resolve, reject) => {
writeStream.on('close', () => resolve());
writeStream.on('error', (err) => reject(err));
readStream.on('error', (err) => reject(err));
});
readStream.pipe(writeStream);
return end;
};
let uploadFileFromStream = async function(fileName, readStream) {
const params = {
Bucket: bucket,
Key: fileName,
Body: readStream
};
return await s3.upload(params).promise();
};