将自定义的node.js函数添加到Lambda Layers中
我在此分享一下我對於2018年的 AWS re:Invent 中所發表的 Lambda Layers 的體驗,也算是一篇備忘錄兼帖文。
由於還沒有太多關於 Layers 和 node.js 的詳細資料,希望這篇能對大家有些參考價值。(關於 python 的話就比較常見了)
需要注意的是,我平時是一名 Android 工程師,對於這個領域其實相當外行,如果有用詞或理解上的錯誤,請狠狠地批評我。
我會懷著淚水修正它們。
Lambda Layers是什么?
简而言之,这是一种功能,它允许将共同的模块整合在一起,在多个Lambda函数中进行重复利用。
Layers + node.js的目录结构
这种感觉差不多
hoge-layer
├── layer
│ └── nodejs
│ ├── node_modules
│ │ └── (入れたいモジュールたち)
│ ├── package.json
├── serverless.yml
serverless.yml的内容如下:
service: hoge-layer
frameworkVersion: ">=1.34.0"
provider:
name: aws
runtime: nodejs8.10
layers:
hogeLayer:
path: layer
compatibleRuntimes:
- nodejs8.10
请注意,如果服务器版本低于1.34.0,则无法支持Layers,请使用更新的版本进行更新。
我想要添加本地模块
由于已经安装了现有的模块(例如moment),因此我更改了结构以尝试插入自定义函数。
hoge-layer
├── layer
│ └── nodejs
│ ├── node_modules
│ │ └── (入れたいモジュールたち)
│ ├── package.json
│ └── hoge_function <- 追加
│ └── hoge.js
└── serverless.yml
然而,当在Lambda侧进行require时,这可能会导致问题。
const hoge = require('/opt/nodejs/hoge_function/hoge');
所以我们需要进行一些修改才能在开发环境下运行,虽然按照这种写法它可以运行。
const hoge = require('hoge');
以下是实现使其工作的步骤:
1. 在hoge_function目录中执行npm install。
2. 将hoge_function添加到nodejs目录的package.json的dependencies中。
3. 在nodejs目录中执行npm install。
4. 部署。
这样就可以使用 require(‘hoge’) 运行了。
虽然开始动了起来,但是…
从结论来看,将自制的本地模块放入Layers可能不太方便。因为在本地环境开发时,最终还是需要该模块才能运行。如果是共用模块,应该已经在本地存在,只需要切换路径即可运行。虽然不是说Layers本身无法使用,但结果与期望有些不同。(这部分是听说的,所以并不是很理解)