6
3

More than 5 years have passed since last update.

Lambda Layersで共通パッケージを作る (ロギングを例にして)

Last updated at Posted at 2018-12-10

AWS re:InventでリリースされたLambda Layersの機能を使うと、パッケージをLambda間で共有して使えます。
この楽さを試すために、例として、どんなLambdaからでも呼び出して使いそうな、CloudWatch Logsに固定のフォーマットでログ出力するパッケージ (命名: cwlogging) をLayer化してみます。

今回の前提はPython3.6です。

cwloggingを作る

作ります。よくあるやつです。logStrでログフォーマットを決めています。

cwlogging.py
import datetime

# Lambdaログ出力(CloudWatch Logs)関数
def logging(errorLv, lambdaName, errorMsg):
    loggingDateStr=(datetime.datetime.now()).strftime('%Y/%m/%d %H:%M:%S')
    logStr = loggingDateStr + " [" + errorLv + "] " + lambdaName + " " + errorMsg
    # CloudWatch Logsに出力
    print(logStr)
    # ログ文字列を返却
    return logStr

cwloggingをzip化

お作法に従う必要があります。
公式ドキュメントを読むと、pythonの場合は「python」ディレクトリを作って、その下に.pyを格納する必要があるようです。
先ほど作ったcwlogging.pyを以下のようにzip化して、s3にアップロードします。

$ mkdir python
$ mv cwlogging.py python/
$ zip -r cwlogging.zip python/
$ aws s3 cp cwlogging.zip s3://lambdalayertest/

Lambda Layersの作成

Lambdaの管理画面に行くと、左側に「Layers」が増えています。
「Layers」の管理画面から、s3上の.zipのパスを指定してアップロードすると、Layerが出来上がります。
今回アップロードしたLayerはimport cwloggingとすることで呼び出せます。

Lambda関数からLayerをimport

Lambda関数のコードは、テストなので簡単にいきます。
忘れずに import cwlogging を書いて、先ほどのLayerをインポートします。

lambda_function.py
import cwlogging

# lambda_handler
def lambda_handler(event, context):
    # TODO implement
    cwlogging.logging("INFO", "LambdaLayerTest", "This is test.")

    return ''

Lambda関数からLayerを参照

Lambda関数の下に、Layerの参照状況を示す画面があります。
lambdalayer2.png
ここで「レイヤーの追加」を押して、Lambda関数とLayerを接続します。
lambdalayer1.png

Lambdaを実行する

Lambda関数からLayerを参照できるようにした後、Lambda関数を実行すると、以下の通りの結果となります。
Lambda関数からLayerを呼び出して処理できていることが分かります。
lambdalayer4.png
別のLambda関数からこのcwloggingを呼び出す時も、別のLambda関数の.zipに固めるのではなく、
同じようにLambda関数からLayerを参照できるようにして、コード内でimport cwloggingしてあげるだけで良いです。

Lambda Layersの登場で、どのLambda関数でも実行するような共通処理があれば、
その処理をLayer化することで、手軽に再利用できるようになりました。便利です。

参考文献

AWS Lambda Layers - AWS公式

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3