0

我有一个 nodeJs 脚本,想在执行过程中休眠。

我创建了一个本地 npm 包和一个项目。项目目录如下。

[ec2-user@ip-local lambdaTestFunction]$ ls -ltr
total 888
drwx------. 8 ec2-user ec2-user     98 Nov 13 11:22 node_modules
-rwxr-xr-x. 1 ec2-user ec2-user    510 Nov 13 13:51 index.js
-rw-------. 1 ec2-user ec2-user 899230 Nov 13 13:51 index.zip
[ec2-user@ip-local lambdaTestFunction]$

我已压缩 node_modules 和 index.js 并将它们压缩为 index.zip

node_modules 包含以下内容

[ec2-user@ip-local lambdaTestFunction]$ cd node_modules/
[ec2-user@ip-local node_modules]$ ls -ltr
total 12
drwx------. 2 ec2-user ec2-user   73 Nov 13 11:22 deasync-promise
drwx------. 2 ec2-user ec2-user   59 Nov 13 11:22 bindings
drwx------. 2 ec2-user ec2-user   71 Nov 13 11:22 system-sleep
drwx------. 4 ec2-user ec2-user 4096 Nov 13 11:22 nan
drwx------. 4 ec2-user ec2-user 4096 Nov 13 11:22 deasync
drwx------. 3 ec2-user ec2-user 4096 Nov 13 11:22 sleep
[ec2-user@ip-local node_modules]$

当我在本地执行脚本 index.js 时,它运行良好,如下所示。

[ec2-user@ip-local lambdaTestFunction]$ node index.js
starting the function
start before wait
after 5 mins
[ec2-user@ip-local lambdaTestFunction]$

但是当我将 zip 导出到 lambda 函数时,执行失败并显示消息

{
  "errorMessage": "Cannot find module 'index/node_modules/sleep'",
  "errorType": "Error",
  "stackTrace": [
    "Module.require (module.js:497:17)",
    "require (internal/module.js:20:19)",
    "Object.<anonymous> (/var/task/index/index.js:2:13)",
    "Module._compile (module.js:570:32)",
    "Object.Module._extensions..js (module.js:579:10)",
    "Module.load (module.js:487:32)",
    "tryModuleLoad (module.js:446:12)",
    "Function.Module._load (module.js:438:3)"
  ]
}

index.js 的内容如下

console.log("starting the function");
var sleep = require('sleep');
console.log("start before wait");
sleep.sleep(5); // 5 seconds
console.log("after 5 mins");


exports.handler = (event, context, callback) => {
    // TODO implement
    //callback(null, 'Hello from Lambda');
    console.log("start before wait");
    //sleep.sleep(5); // 5 seconds
    //             //setTimeout(function(){ alert("Hello"); }, 3000);
    console.log("after 5 mins");
    callback(null, 'Hello from Lambda after 5 sec');

};

我不确定我还缺少什么。

4

1 回答 1

0

主要是因为压缩文件的方式造成了问题。您必须选择所有文件并将其压缩,而不是压缩文件夹,如下所示,

请上传所有文件和文件夹,包括您的 node_modules 文件夹

在此处输入图像描述

于 2017-11-13T13:44:19.580 回答