AWS Lambda layersを作成/管理できるツールlamblayerを作りました!
現在はPythonにのみ対応しています。
できること
- pipでinstallできるpakcageのビルド済みlayerを作成する(←これがとっても便利)
- ローカルのディレクトリからlayerを作成する
- Lambdaにlayerを設定する
jsonの設定ファイルからパラメータを読み取って内部でLambdaのAPIを叩いています。
Quick Start
現在はpipでのみインストール可能です。
pip install git+https://github.com/YU-SUKETAKAHASHI/lamblayer.git@v0.1.0
lamblayer init
で既存のLambdaを取り込みます。
$ mkdir quick_start
$ cd quick-start
$ lamblayer init --function-name quick_start
2021-12-24 10:13:41,225: [INFO]: lamblayer : v0.1.0
2021-12-24 10:13:42,132: [INFO]: starting init quick_start
2021-12-24 10:13:42,318: [INFO]: createing function.json
2021-12-24 10:13:42,319: [INFO]: completed
するとfunction.jsonが生成されるので、以降はfunction.jsonを編集してlamblayer set
でLambdaにlayerをセットすることができます。
$ lamblayer set
2021-12-24 10:23:34,041: [INFO]: lamblayer : v0.1.0
2021-12-24 10:23:35,312: [INFO]: starting set layers to quick_start
2021-12-24 10:23:35,723: [INFO]: completed
Create layer
lamblayer create
でlayerを作成することもできます。
pipでインストール可能なパッケージのビルド済みlayerの作成と、 ローカルのディレクトリからlayerを作成することの2種類ができます。
1. pipでインストール可能なパッケージのビルド済みlayerの作成
こんな感じにパッケージ名とバージョンをjsonで書けば、
lamblayer creage --packages packages.json
でLambdaで実行可能なビルド済みのlayerが作成されます。
これがとっても便利で、Dockerを立ち上げてpip installしてzipつくって...という作業から解放されます。最高!
内部では外部ライブラリのLambda Layerを生成するAPIをLambdaで作ってみた【Python】で紹介されているAPIを叩いています。
{
"Arch": "x86_64",
"Runtime": "py38",
"Packages": [
"numpy==1.20.2",
"requests"
]
}
作成するlayerの名前や実行環境などは別にjsonで書いてください。--layer
オプションでファイルを指定できます。
{
"LayerName": "numpy_requests",
"Description": "numpy==1.20.2, requests",
"CompatibleRuntimes": [
"python3.7",
"python3.8",
"python3.9"
],
"LicenseInfo": ""
}
※現在はまだ外部ライブラリのLambda Layerを生成するAPIをLambdaで作ってみた【Python】のAPIを公開していないため、この機能は利用できません。ご興味があれば上述の記事中のGoogleフォームよりご連絡ください!
2. ローカルのディレクトリからlayerを作成する
ローカルのディレクトリを指定して、自作パッケージのlayerを作成することもできます。
lamblayer create --src my_package
layerを作成するときの地味な沼ポイントとして、ファイルたちをpython
ディレクトリ以下に配置する必要がありますが、それもlamblayerがやってくれます。
--wrap-dir
オプションでディレクトリ名を指定してあげれば、--src
以下のファイルをラップしたlayerを作成することができます。
これで自分でpythonフォルダに配置し直す手間はありません。
lamblayer create --src my_package --wrap-dir1 python
Set Layer
lamblayer set
でLambdaにlayerをセットすることができます。こちらは--function
オプションで設定ファイルを指定できます。
{
"FunctionName": "quick_start",
"Layers": [
"arn:aws:lambda:ap-northeast-1:249908578461:layer:AWSLambda-Python38-SciPy1x:29",
"numpy_requests",
"my_package"
]
}
function.jsonでlayer名のみを指定した場合は自動で最新のバージョンのARNに補完してくれます。これもとっても便利で、lamblayer create
で作成した最新バージョンのlayerをセットするには、function.jsonにlayer名のみを指定してlamblayer set
すればOKです。
その他のcommand
現在は、init, create, set, listコマンドがあります。
最後に
GitHub Actionsでも利用できるようにlamblayerをインストールするactionも作りました。
詳細はREADMEに記してあるのでご覧ください!
どうぞご利用ください!