执行基于node.js的aws lambda函数时访问被拒绝

时间:2017-12-19 14:25:59

标签: node.js aws-lambda

我正在为node.js开发一个基于ytdl模块的函数。实际上,我只是想下载一个YouTube视频。 当我测试我的功能时,我收到了这个错误:

2017-12-16T17:25:48.627Z 27dbca8d-e286-11e7-9f17-851e6c66e221 Error: spawn EACCES
at exports._errnoException (util.js:1018:11)
at ChildProcess.spawn (internal/child_process.js:319:11)
at exports.spawn (child_process.js:378:9)
at exports.execFile (child_process.js:143:15)
at call (/var/task/node_modules/youtube-dl/lib/youtube-dl.js:163:5)
at Function.getInfo (/var/task/node_modules/youtube-dl/lib/youtube-dl.js:285:5)
at module.exports (/var/task/node_modules/youtube-dl/lib/youtube-dl.js:107:10)
at exports.handler (/var/task/index.js:6:14)

在一些谷歌搜索请求后,我发现它与访问问题有关。但是,我的代码没有需要访问权限的特殊操作。 你能帮忙吗

var path = require('path');
var fs = require('fs');
var ytdl = require('./node_modules/youtube-dl');
exports.handler = (event, context, callback) => {

    var video = ytdl('https://www.youtube.com/watch?v=AW8OOp2undg',
            // Optional arguments passed to youtube-dl.
            ['-o', '/tmp/test.mp4']);


        var size = 0;
        video.on('info', function(info) {
            'use strict';
            size = info.size;

            console.log('Got video info');
            var file = path.join(__dirname, info._filename);
            video.pipe(fs.createWriteStream(file));

        });

        var pos = 0;
        video.on('data', function data(chunk) {
            'use strict';
            pos += chunk.length;

            // `size` should not be 0 here.
            if (size) {
                var percent = (pos / size * 100).toFixed(2);
                process.stdout.cursorTo(0);
                process.stdout.clearLine(1);
                process.stdout.write(percent + '%');
            }
        });

        video.on('end', function end() {
            'use strict';
            console.log('\nDone');
        });


callback(null, 'Hello from Lambda');

};

2 个答案:

答案 0 :(得分:1)

node-ytdl使用预编译的二进制文件,因此您应该从与目标相同的OS / arch部署lambda。

或使用纯javascript模块:

  

如果您只对从youtube下载感兴趣,则应考虑使用纯Javascript youtube下载模块。 => https://github.com/fent/node-ytdl

来源:https://www.npmjs.com/package/youtube-dl

答案 1 :(得分:0)

只需更改youtube-dl的权限:

chmod +x youtube-dl