将自定义的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本身无法使用,但结果与期望有些不同。(这部分是听说的,所以并不是很理解)

广告
将在 10 秒后关闭
bannerAds