はじめに

AWS re:Invent 2018 でLambdaのLayer機能が発表されたのでどういう使い方をするかなーと考えてみました。
使い方についてはもういろんなサイトで公開されているので割愛。

今回は、分析時に便利なX-Rayの導入を簡素化させるためのLayerを用意してみました。

Lambdaのコードや設定はここを参考にしています。

tl;dr

  • Layerはパッケージを作るときに言語毎のルールがあるのでそれに従わないといけない
  • Layerは/optに展開される
  • あとは通常のライブラリの使い方と同じかんじ
  • X-Rayやrequestsのライブラリを個別に入れる手間が少しだけはぶける。(既存のLambdaに手を加える必要はある。)

やったこと

前提

  • ALB、Lambdaは東京リージョンに作成
  • Layerの言語はPython 3.6
  • Layerを追加したいLambdaはすでに作成ずみ(Python 3.6)

Layerのパッケージの作成

今回はX-Rayとrequestsを含めたLayerを作成する

$ mkdir python
$ touch python/layer.py
$ pip install requests -t .python/
$ pip install aws-xray-sdk -t .python/

layer.pyを編集する

layer.py

from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all

patch_all()

zipにしたらパッケージの準備完了

$ zip -r python.zip python/

Layerの作成

$ aws lambda publish-layer-version --layer-name x-ray-layer --description "x-ray layer" --license-info "MIT" --content S3Bucket=xxxx,S3Key=python.zip --compatible-runtimes python3.6

LambdaにLayerを追加

$ aws lambda update-function-configuration --function-name <function_name>--layers arn:aws:lambda:ap-northeast-1:<account_id>:layer:x-ray-layer:1

LambdaのX-Rayを有効化

$ aws lambda update-function-configuration --function-name <function_name> --tracing-config '{"Mode": "Active"}'

これで、準備は完了。
あとはLayerを追加したLambdaに以下の一文を追加するとX-Rayでトレースが見られるようになる。

import layer,py

Layerを適用したLambdaのデプロイ用のパッケージは容量減るのですっきりした感じがする。
(実行時のモジュールサイズはへらない。)

元記事はこちら

Lambda Layer と X-Ray