Lambda 函数因无法导入模块“索引”而失败
Posted
技术标签:
【中文标题】Lambda 函数因无法导入模块“索引”而失败【英文标题】:Lambda function failing with Unable to import module 'index' 【发布时间】:2018-02-14 19:13:06 【问题描述】:错误:
Unable to import module 'index': Error
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/var/task/node_modules/slack-incoming-webhook/lib/index.js:3:19)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
从外观上看,我的代码不是问题,而是 slack-incoming-webhook 节点模块的问题,但是有问题的代码是这一行,看起来完全正常。
var SlackClient = require('./client');
我现在已经尝试了 4 个不同的包(request、http、node-webhooks 和现在 slack-incoming-webhooks),但它们都在节点模块中失败了。我非常困惑,因为我可以让代码在我自己的计算机和 Amazon Linux AMI EC2 实例上运行(运行相同的节点版本)
所有代码都被压缩并使用 aws-cli 发送到 lambda,我之前已经在 lambda 上部署了 node.js 代码,没有任何问题(alexa 技能)。
我在 ec2 实例上尝试了 npm install,我尝试了几个不同的包,我得出的结论是 lambda 中一定存在某种配置错误,但我找不到什么。有人能指出我正确的方向吗...
如果有人好奇,这是我的代码,lambda 触发器也是一个 aws iot 按钮。
const slack = require('slack-incoming-webhook');
const send = slack(
url: 'https://hooks.slack.com/....'
);
exports.handler = function ()
send(process.env.company + ' has pushed their panic button! PANIC! PANIC! PANIC!');
;
【问题讨论】:
【参考方案1】:这是我在很多帖子中看到的常见问题。大多数情况下,它是压缩文件的方式造成问题。而不是压缩文件夹,您必须选择所有文件并将其压缩,如下所示,
【讨论】:
谢谢,这很奇怪,因为当我编码我的 alexa 技能时,我以完全相同的方式压缩它并且 alexa-skill 有效。【参考方案2】:我只是指使用 Apex (http://apex.run/)。 几乎可以与 AWS Lambda 一起使用的 awsm 无服务器框架。设置完成后,无需手动压缩。
只需执行几个命令:
-
apex create(创建 lambda)
apex deploy(部署到您的 AWS 区域,无需手动压缩)
apex invoke 从您的终端调用它。
谢谢
【讨论】:
以上是关于Lambda 函数因无法导入模块“索引”而失败的主要内容,如果未能解决你的问题,请参考以下文章
需要 SOAP - Node JS 包失败并在 AWS Lambda 中出现导入错误
AWS Lambda Python 3.7:无法导入模块'lambda_function':缺少必需的依赖项['numpy']
AWS Lambda python 错误:Runtime.ImportModuleError:无法导入模块“app”:无法从“pyparsing”导入名称“operatorPrecedence”