🅰️

Lambda × Python で外部レイヤーを利用するときは Klayers が便利

2024/06/06に公開

ちょっとした処理を Python × Lambda で作成することがよくあるのですが、そのときに少しめんどくさいのが各種ライブラリの利用です。

https://zenn.dev/ndjndj/articles/69a2aabb227530

こんな記事を書いたこともありましたが、ライブラリ自体のバージョンやランタイムのバージョンが上がるごとに Zip 化 -> アップロード対応する必要があります。
ほんとにちょっとした処理のために使いたいだけなのに・・・という気持ちもあり、全体的にお手軽とはいえもう少し楽したい気分です。

Keith's Layers (Klayers)

Keith's Layers (Klayers) は Python の Lambda レイヤーを公開・管理しているリポジトリです。

https://github.com/keithrozario/Klayers

すべてのライブラリを網羅しているわけではありませんが、有名どころはそろっている印象です。
Python3.11 対応リスト

Lambda, DynamoDB, EventBridge などを用いてレイヤーの管理を自動化しており、毎月1日にライブラリのバージョンをチェックして新しいバージョンを構築するとのことです(ただし、不具合があって fix されたライブラリがある場合は Issue にて報告すれば対応してくれるっぽい)。

注意点は原則として公開から 365 日が経過したレイヤーは削除されてしまう可能性があることです。
Lambda 関数をデプロイしたときに指定したレイヤーは利用できますが、新しく関数を作成する際にそのレイヤーを指定することができないので注意が必要です。

外部レイヤーの指定方法

利用したいライブラリの ARN をメモしておきます。
Klayers から探す場合は、Readme.md の 「List of ARNs」 から対象のランタイムバージョンを選択し、対象の Lambda 関数のリージョンを選択し、利用したいライブラリの ARN を探します。

ARN がメモできたら、マネジメントコンソールからレイヤーを設定したい Lambda 関数のページにレイヤー設定があるので、「レイヤーを追加」します。

レイヤーを選択する画面に遷移するので、「ARN を指定」-> メモした ARN を入力すれば、利用可能になります。

さいごに

Zip 化する前に確認しよう
有志の方々に感謝です

参考

https://github.com/keithrozario/Klayers

Discussion