AWS Lambda Layers でライブラリを共通化する

AWS運用自動化サービス「Cloud Automator」

はじめに

こんにちは、技術一課の山中です。

re:Invent 2018 にて AWS Lambda Layers が発表されました!

新機能 – AWS Lambda :あらゆるプログラム言語への対応と一般的なコンポーネントの共有 | Amazon Web Services ブログ

例えば ロギングモジュール等、今まで複数の Lambda ファンクションから呼び出すライブラリがあっても各ファンクションごとにパッケージングする必要がありました。
今回発表された AWS Lambda Layers を利用することで共通モジュール / 共通処理を Layer 化して複数の Lambda ファンクションから利用することができるようです。

というわけで、早速試していきます。

共通プログラム作成

今回は試しに、ロギング部分と Amazon SNS によるメッセージング部分を Layer として共通化してみたいとおもいます。
実際に書いた Python ファイルはそれぞれ以下のとおりです。

log.py

sns.py

log.py がロギング用、 sns.py が SNS によるメッセージング用となります。
作成した Python ファイル及びライブリ群を以下のように zip ファイルにまとめます。

この作成した zip ファイルを Lambda Layer として登録していきます。

Lambda Layer の作成

Lambdaのコンソールから [Layers] を選択し、 [Create layer] ボタンをクリックします。

Layer 作戦画面にて先程作成した layer.zip ファイルをアップロードし、適当な名前を付け作成します。

これで Layer が完成です。簡単ですね!

Lambda ファンクションの作成

Layer を利用して Lambda ファンクションを作成していきます。

今回はランタイムを Python 3.7 、 IAM Role として SNS へのフルアクセスポリシーを持つロールを選択しました。

作成が完了したら、 [Layers] を選択後 [Add a layer] ボタンをクリックします。

先程作成した Layer を選択し、 [Add] ボタンをクリックします。これだけで、 Layer の追加は完了です。

次にメインの Lambda ファンクションのコードを書いていきます。

今回は以下のような簡単なコードを書いてみました。

コードの 1 行目及び 2 行目で Layer から利用する機能をインポートしています。

後は [Save] ボタンをクリックして作成完了です!

試してみる

では早速テストしていきましょう。
適当にテストイベントを作成します。

[Test] ボタンをクリックします。

インポートエラーも起こさず、きちんとログが出力されています!

メールはどうでしょうか。

きちんと届いています!

おわりに

コードの共通化が AWS Lambda Layers を利用すると簡単に実装できました。
ロギング等ほとんどのファンクションで利用するコードを共通化することで、メインのコードに集中及び簡素化することができます。

Layer 化する単位や関数等はプロジェクトによって、考慮する必要はありますがどんどん使っていきたいですね!

AWS運用自動化サービス「Cloud Automator」