Jam*_*unn 7 amazon-web-services node.js aws-lambda
我正在创建一个 lambda 层,捆绑了一些依赖项,包括 node_modules。我成功创建了一个层,但是当我尝试从我的代码中要求一个模块时,控制台告诉我找不到该模块。这是代码
var Promise = require('promise');
module.exports.handler = function(event, context, callback) {
new Promise(function (resolve, reject) {
setTimeout(function() {
callback(null, "helloWorld2");
}, 9000);
});
};
Run Code Online (Sandbox Code Playgroud)
如何从层引用节点模块???
你是如何运行你的 lambda 的?如果通过sam cli,像下面这样的东西对我有用,因为我的template.yaml......
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Description: example of node.js lambda function using layer for dependencies
Resources:
ExampleFunction:
Type: AWS::Serverless::Function
Properties:
Runtime: nodejs8.10
CodeUri: nodejs/
Handler: src/event.handler
Layers:
- !Ref NodeModulesLayer
NodeModulesLayer:
Type: AWS::Serverless::LayerVersion
Properties:
Description: full set of function dependencies
ContentUri: ./
CompatibleRuntimes:
- nodejs6.10
- nodejs8.10
LicenseInfo: 'Available under the MIT-0 license.'
RetentionPolicy: Retain
Run Code Online (Sandbox Code Playgroud)
SAM 开发人员指南包括一个关于使用层的页面。在我写这篇文章的时候,他们并没有真正了解如何在本地文件路径上引用图层,而是专注于对远程托管图层的引用。
我发现棘手的方面是 node.js 层的目录结构应该是......
nodejs/
node_modules/
Run Code Online (Sandbox Code Playgroud)
...这意味着为了让您本地安装的node_modules目录作为一个层工作,您的package.json文件必须嵌套在名为nodejs.
注意上面例子中的路径template.yaml:
ExampleFunction.Properties.CodeUri 被设定为 nodejs/ExampleFunction.Properties.Handler应该设置为您的处理程序文件的路径,相对于nodejs/.NodeModulesLayer.Properties.ContentUri设置为包含template.yaml文件和nodejs目录的文件夹。这意味着我的示例假设以下结构......
nodejs/
node_modules/
src/
event.js
package.json
template.yaml
Run Code Online (Sandbox Code Playgroud)
另一个需要警惕的问题......
关于在 中定义函数资源template.yaml,在将路径的哪些部分放入CodeUri与Handler. 在某些情况下,做...
Properties:
CodeUri: nodejs/src/
Handler: event.handler
Run Code Online (Sandbox Code Playgroud)
... 效果和做 ... 一样好
Properties:
CodeUri: nodejs/
Handler: src/event.handler
Run Code Online (Sandbox Code Playgroud)
但是,如果您正在使用该sam build命令,则前者将不起作用。该命令期望package.json在CodeUri目录中找到。因此,坚持CodeUri: nodejs/并使用该Handler值来浏览到达处理程序所需的任何其他文件夹层次结构。
小智 2
试试这个简单的例子,如何在 Node.js 中设置 lambda 层:
https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e