Help us understand the problem. What is going on with this article?

Lambda Layersにnode.jsの自作関数を追加する

re:Invent 2018で発表されたAWSの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の中身は以下の通り

serverless.yml
service: hoge-layer
frameworkVersion: ">=1.34.0"
provider:
  name: aws
  runtime: nodejs8.10

layers:
  hogeLayer:
    path: layer
    compatibleRuntimes:
      - nodejs8.10

注意点としてはserverlessのバージョンを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. nodejsディレクトリのpackage.jsonのdependenciesにhoge_functionを追記
3. nodejsディレクトリでnpm installを実施
4. デプロイ

これでrequire('hoge')で動くようになった

動くようにはなった、が・・・

結論から言うと自作のローカルモジュールをLayersに入れるのはあまり便利ではなさそうらしい。
ローカル環境で開発する際に結局そのモジュールがないと動かないから。
共通モジュールならローカルにも入ってるはずなのでパスを切り替えれば動くらしいので、
Layers自体が使えないってわけではないけどちょっと思惑とは違った結果になった。
(この辺は聞いた話なのであんまりわかってない)

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away