lambda関数デプロイ時に、ライブラリをレイヤーにしてみた【Python】

IT

概要

lambdaで使用するライブラリをレイヤーとして切り出して使用する方法を記載します。

Layerとは

AWSのページには以下のように記載されています。

Lambda レイヤーは、補助的なコードやデータを含む .zip ファイルアーカイブです。レイヤーには通常、ライブラリの依存関係、カスタムランタイム、または設定ファイルが含まれています。

<公式>
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/chapter-layers.html

公式に色々記載されていますが、自分は基本的に以下のような原因を解決する時に用いています。

  • lambdaのパッケージが50MBを超えて、zipアーカイブとしてデプロイできない場合に、ライブラリを分離して軽くする。
  • 複数のlambda関数で同じライブラリを使用するときがある場合、共通パッケージとして切り出して管理しやすいようにする。

レイヤー作成方法

概要

①インポートしたいライブラリをrequirements.txtにまとめる
②requirements.txtにまとめたライブラリを取得する
③取得したライブラリを「python.zip」として圧縮する
④圧縮したファイルをレイヤーに登録する

内容

①インポートしたいライブラリをrequirements.txtにまとめる


今回はレイヤーを登録するlambda関数でwebスクレイピングをしたいので、requests, beautifulsoup4とします。
以下のようにまとめます。

②requirements.txtにまとめたライブラリを取得する


以下のコマンドを用いて、requirements.txtから取得します。
下の図のように、outputディレクトリ名として指定した、「python」配下に必要なライブラリが出力されます。

pip install -r requirements.txt -t ./python
③取得したライブラリを「python.zip」として圧縮する

以下のコマンドを用いて、zip化を行います。

zip -r python.zip ./python

※このとき、ファイル名を「python.zip」としないとlambdaがレイヤーを読み込めなくなるので注意が必要です!

④圧縮したファイルをレイヤーに登録する


「レイヤー」を押下します。

「レイヤーの作成」を押下します。
(キャプチャではすでにレイヤーがありますが、自身が過去に作ったものなので、初めて作成される方は何も表示されないと思います)




下図のように、「名前」を記載します。
「.zipファイルアップロード」を選択し、アップロードを押下します。
③で作成した「python.zip」をアップロードします。

ランタイムは、lambda関数で使用するランタイムが必ず含まれるように選択してください。今回、本レイヤーを使用するlambda関数のランタイムがpython 3.12のため、ランタイムをPython3.12にしています。
また、レイヤーのランタイムは複数登録可能なので、Python3.11, Python3.12のようにもできます。


これで登録が完了しました!

レイヤーをlambda関数に紐づける


紐づけたいlambda関数のページの下部に「レイヤー」があります。「レイヤーの追加」をクリックします。


カスタムレイヤーを選択し、先ほど作成した名前のレイヤーを選択します。
その名前のレイヤーを初めて作成した場合、バージョンは1になっていると思いますので、1を選択します。


これで紐付け完了です!後はテストして、無事にライブラリが読み込めているか確認してみてください。

最後に

ここまでお読みいただきありがとうございます。今回はレイヤーの作成に関して紹介しました。レイヤーとしてライブラリをまとめておくことで、いろんな関数の共通ライブラリとしても使用できるのは便利ですよね..!
みなさまのお役に立てれば幸いです。

コメント

タイトルとURLをコピーしました