无法将任何第 3 方模块与 AWS Lambdas 一起使用
Unable to use any 3rd party module with AWS Lambdas
我正在开发一个使用模块(异步、请求等)的 lambda
Unable to import module 'index': Error
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/var/task/index.js:1:63)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
示例代码:
var
AWS = require('aws-sdk'),
util = require('util'),
request = require('request');
exports.handler = function(event, context) {
console.log('test');
context.done();
};
只要不需要第 3 方模块(除了 aws-sdk),它就可以正常工作(打印测试)。只要我添加一行,例如:
require('request') // or async, config and so on
失败并出现上述错误。我也尝试通过指定完整路径直接调用这些模块,但没有成功。这就像它在调用 require
.
时查看了错误的目录
在控制台中转储 process.env
会产生:
PATH: '/usr/local/bin:/usr/bin:/bin',
LAMBDA_TASK_ROOT: '/var/task',
LAMBDA_RUNTIME_DIR: '/var/runtime',
AWS_REGION: 'us-west-2',
AWS_DEFAULT_REGION: 'us-west-2',
AWS_LAMBDA_LOG_GROUP_NAME: '/aws/lambda/Thumbnailer',
AWS_LAMBDA_LOG_STREAM_NAME: '2015/12/10/[$LATEST]3f8ef236195448c88f206634bde6301b',
AWS_LAMBDA_FUNCTION_NAME: 'Thumbnailer',
AWS_LAMBDA_FUNCTION_MEMORY_SIZE: '512',
AWS_LAMBDA_FUNCTION_VERSION: '$LATEST',
NODE_PATH: '/var/runtime:/var/task:/var/runtime/node_modules',
这是我正在工作的 module - 显然这曾经在某些时候工作但不适合我。
想法?我觉得我在这里缺少一些lambdas特有的配置。
天哪,这很痛苦……原来 OSX 使 node_modules
文件夹只能由用户读取,而 AWS 无法读取它。使 node_modules
文件夹和内容对世界可读并且它有效。我不确定所有 OSX 设置的反应是否相同。我正在使用 nvm
这可能是罪魁祸首。
更新。我曾经将所有文件设置为 0666
但 运行 导致可执行文件出现问题。这是一个可以正确解决问题的小脚本。它会将所有文件设置为 0666
,除非可执行文件或目录 0777
。 运行 来自项目文件夹(请注意不这样做的后果!):
这是来自 我发布的脚本:
#!/bin/bash
find . \
'(' -perm -0700 -exec chmod 0777 '{}' + ')' -o \
'(' -perm -0600 -exec chmod 0666 '{}' + ')'
我正在开发一个使用模块(异步、请求等)的 lambda
Unable to import module 'index': Error
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/var/task/index.js:1:63)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
示例代码:
var
AWS = require('aws-sdk'),
util = require('util'),
request = require('request');
exports.handler = function(event, context) {
console.log('test');
context.done();
};
只要不需要第 3 方模块(除了 aws-sdk),它就可以正常工作(打印测试)。只要我添加一行,例如:
require('request') // or async, config and so on
失败并出现上述错误。我也尝试通过指定完整路径直接调用这些模块,但没有成功。这就像它在调用 require
.
在控制台中转储 process.env
会产生:
PATH: '/usr/local/bin:/usr/bin:/bin',
LAMBDA_TASK_ROOT: '/var/task',
LAMBDA_RUNTIME_DIR: '/var/runtime',
AWS_REGION: 'us-west-2',
AWS_DEFAULT_REGION: 'us-west-2',
AWS_LAMBDA_LOG_GROUP_NAME: '/aws/lambda/Thumbnailer',
AWS_LAMBDA_LOG_STREAM_NAME: '2015/12/10/[$LATEST]3f8ef236195448c88f206634bde6301b',
AWS_LAMBDA_FUNCTION_NAME: 'Thumbnailer',
AWS_LAMBDA_FUNCTION_MEMORY_SIZE: '512',
AWS_LAMBDA_FUNCTION_VERSION: '$LATEST',
NODE_PATH: '/var/runtime:/var/task:/var/runtime/node_modules',
这是我正在工作的 module - 显然这曾经在某些时候工作但不适合我。
想法?我觉得我在这里缺少一些lambdas特有的配置。
天哪,这很痛苦……原来 OSX 使 node_modules
文件夹只能由用户读取,而 AWS 无法读取它。使 node_modules
文件夹和内容对世界可读并且它有效。我不确定所有 OSX 设置的反应是否相同。我正在使用 nvm
这可能是罪魁祸首。
更新。我曾经将所有文件设置为 0666
但 运行 导致可执行文件出现问题。这是一个可以正确解决问题的小脚本。它会将所有文件设置为 0666
,除非可执行文件或目录 0777
。 运行 来自项目文件夹(请注意不这样做的后果!):
这是来自
#!/bin/bash
find . \
'(' -perm -0700 -exec chmod 0777 '{}' + ')' -o \
'(' -perm -0600 -exec chmod 0666 '{}' + ')'