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 函数因无法导入模块“索引”而失败的主要内容,如果未能解决你的问题,请参考以下文章

Lambda 因“找不到模块...”而失败

需要 SOAP - Node JS 包失败并在 AWS Lambda 中出现导入错误

AWS Lambda Python 3.7:无法导入模块'lambda_function':缺少必需的依赖项['numpy']

AWS Lambda python 错误:Runtime.ImportModuleError:无法导入模块“app”:无法从“pyparsing”导入名称“operatorPrecedence”

导入反应图时,Jest 因“未定义自我”而失败

Lambda 上的 MySQL 连接器产生无法导入模块“myapp”:没有名为“mysql”的模块