LoginSignup
55
53

More than 3 years have passed since last update.

AWS Lambda Layers作成から紐付けまでさらっと解説

Posted at

はじめに

Pythonを扱う前提の記事です。

Layers(レイヤー)とは

ガイドによると

レイヤーは、ライブラリ、カスタムランタイム、またはその他の依存関係を含む ZIP アーカイブです。レイヤーを使用することで、関数のライブラリを使用することができます。

ライブラリのような共通で使用するモジュールをLayerにすることで、デプロイパッケージにライブラリを含める必要がなくなります。
つまり、Lambdaでサードパーティ製のライブラリやモジュールを使用する際に、Layerに格納して各Lambda関数から呼び出して使用するというような使い方ができます。

注記

・Lambdaで一度に利用できるLayerは5つまで
・解凍後のデプロイパッケージのサイズ制限 250 MB

ディレクトリ構成

Lambda実行環境のパスは /opt ディレクトリとなるので、
Layerのディレクトリ構成としては /opt/python/Layer となります。

レイヤー自体のパッケージ構成はこんな感じ。

python
├ layer.py (共通処理などコードも入れられます。common的に扱える)
├ Crypto (外部ライブラリその1)
├ psycopg2 (外部ライブラリその2)
├ sqlalchemy (外部ライブラリその3)
…etc

Layerの作成

ローカルで作成してみます。

ライブラリを場所指定でpip installする。

$ pip install pycryptodome -t .

そしてzip

$ zip -r  ../python .

AWS上でLayerの作成を行います

スクリーンショット 2020-10-28 16.57.13.png

上から順に
・名前(必須)
・説明(なくても可)
・アップロード(先ほど作成したzipを選択)
・互換性のあるランタイム - オプション(忘れがちになるので注意)
・ライセンス - オプション(なくても可)

「作成」をクリックしLayerを作成します。

Lambda関数に紐付け

今度はLambda関数にLayerを紐付けます。

Layerを紐付けたいLambda関数から「デザイナー」を選択し、
「レイヤーの追加」を選択。

スクリーンショット 2020-10-28 16.55.56.png

「レイヤーの選択」から「カスタムレイヤー」をクリックし作成したLayerを選びます。
その後「バージョン」を設定し、「追加」をクリックして完了です。

Lambdaから呼び出すときはimportして呼び出します。

import layer

よくあるミス

・LambdaはAmazon Linux上で動作するので、
pip installした環境によっては実行エラーとなるライブラリもあります。

・AWSにアップロードしたLayerはバージョンごとにダウンロードすることも出来ます。
そしてLayerが増えてくるとディレクトリで、こんな感じで管理することもあるかと思います。

test_layer
├ python
    ├ layer.py 
    ├ Crypto 

この場合、そのまま解凍し修正してzipしがちですが、
そのままzipすると親ディレクトリも圧縮してしまいアップロード後の展開時にディレクトリ階層とマッチしなくなるので
作成した時と同じく中身をzipしましょう。

$ zip -r  ../python .

まとめ

Layerは上手く使えばLambda間でのコード共有など非常に便利です。
上手く活用していきましょう。

参考

55
53
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
55
53