node.js - 无法将任何第 3 方模块与 AWS Lambdas 一起使用

标签 node.js amazon-web-services aws-lambda

我正在开发一个使用模块(异步、请求等)的 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 - 显然这曾经在某些时候有效但不适合我。

想法?我觉得我在这里缺少一些 lambda 特有的配置。

最佳答案

我的天啊,这很痛苦...原来 OSX 使 node_modules 文件夹只能由用户读取,而 AWS 无法读取它。使 node_modules 文件夹和内容对世界可读并且它有效。我不确定所有 OSX 设置的 react 是否相同。我正在使用 nvm,这可能是罪魁祸首。

更新。我曾经将所有文件设置为 0666 但遇到了可执行文件的问题。这是一个可以正确解决问题的小脚本。它会将所有文件设置为 0666,除非是可执行文件或目录,在这种情况下为 0777。从项目文件夹中运行它(请注意不这样做的后果!):

这是来自 question 的脚本我发帖:

#!/bin/bash
find . \
 '(' -perm -0700 -exec chmod 0777 '{}' + ')' -o \
 '(' -perm -0600 -exec chmod 0666 '{}' + ')'

关于node.js - 无法将任何第 3 方模块与 AWS Lambdas 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34208502/

相关文章:

node.js - Node 版本管理器 (NVM) npm 将模块安装到公共(public)文件夹

javascript - 在 Node.js 中通过命令行不会出现实际错误

amazon-web-services - AWS Cognito 与 CloudFormation - 架构属性上的 InvalidParameterException

java - 无法在 Lambda 函数之间传递有效的 JSON

java - 无法连接通过sparkjava创建的websocket url

javascript - 如何从 Nodejs 应用程序以 cronjob 的形式发送 ejs 文件作为 HTML 电子邮件

amazon-web-services - elastic beanstalk 奇怪的 nginx 配置

ios - 如何降低 AWS on iOS App 的成本?

azure - lex 中单个 lambda 函数的多个返回语句

amazon-web-services - 如何获取和使用确认 'yes' 或 'no' 用于 Alexa 技能 intent 响应