こんにちは、ウヤルームのうや(@uyaroom)です!
今回はAWS関連の技術記事です。
Lambda Layersで自作モジュールをレイヤー化する方法についてご紹介します。
はじめにLambda Layersとは何か、そのメリットについてご紹介します。
その後、Lambda Layersで共通モジュールをレイヤー化する方法についてご紹介します。
目次
Lambda Layersはモジュール共有機能
一言で言うと、Lambda間でモジュールを共有する機能です。
2018年のre:Inventで発表されました。
Lambda Layersの利点
Lambdaで外部モジュールを使う場合、Lambda Layersが発表される前は作成した関数と一緒に外部モジュールをzip化してlambda関数として登録する必要がありました。
Lambda Layersを使うと外部モジュールと関数をそれぞれ独立してLambdaにアップロードすることができます。
外部モジュールと関数をそれぞれ独立してLambdaにアップロードすることによって2つのメリットがあります。
- 自作モジュールをLambda Layersに置いて共通モジュールとして使い回せる
- モジュールの容量が大きい場合でもインラインコード編集ができる。
自作モジュールをLambda Layersに置いて共通モジュールとして使い回せる
Lambda LayersはLambda間でモジュールを共有できる機能です。
このモジュールは外部のモジュールだけでなく、自作のモジュールも対象です。
そのため、よく使う関数などをLambda Layers化することで、すべてのLambdaから呼び出すことができます。
モジュールの容量が大きい場合でもインラインコード編集ができる。
Lambdaのコンソール画面にはコードの編集・確認ができるインラインコード編集という機能があります。
しかし、コードの容量が多い場合、次のような警告が表示されてインラインコード編集ができなくなります。見覚えのある方も多いと思います。
Lambda 関数 「〇〇」のデプロイパッケージが大きすぎて、インラインコード編集を有効にできません。ただし、関数を呼び出すことはできます。
だいたいの原因はLambda関数として登録した外部モジュールの容量が大きいためです。
Lambda Layersは外部モジュールと関数を独立して管理するので外部モジュールの容量によってインラインコード編集ができなくなることはありません。
Lambda Layersで自作モジュールをレイヤー化する方法
前置きが長くなりましたが、ここから本題に入ります。
Lambda Layersで自作モジュールをレイヤー化する方法はとっても簡単です。
- レイヤー化したい関数(func_sample)が書かれたPythonモジュール(layer.py)を作成する
- layer.pyをpythonという名前のディレクトリに格納する
- pythonという名前のディレクトリをzip化してコンソール画面からLambda Layersにアップロードする
手順の2つ目が最重要です。
Lambda Layersにアップロードされたモジュールは/optの領域に展開されます。
そのため、pythonという名前のディレクトリにPythonモジュールを格納してアップロードすることでLambdaを実行した際にモジュールとして自動的に読み込むことができます。
私はこのディレクトリ名を別の名前にしていたため、1時間ほどハマりました。。
ぜひLambda Layersで自作モジュールをレイヤー化してみては
今回はLambda Layersで自作モジュールをレイヤー化する方法についてご紹介しました。
自作モジュールをレイヤー化して全Lambdaで共有する構成は、まだ流行っていないもののかなり便利だと思います。
私もLINE Bot開発などで作成していた共有関数をまとめてレイヤー化してみたいと思います。
最後までご覧いただきありがとうございました。
LINE Bot開発の記事「LINE Botでゴミ出し通知システムつくってみた」もあわせてどうぞ。

コメントを残す