LoginSignup
2
0

More than 1 year has passed since last update.

AWS Lambda layersを作成/管理できるツールlamblayerを作った

Last updated at Posted at 2021-12-24

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を叩いています。

packages.json
{
    "Arch": "x86_64",
    "Runtime": "py38",
    "Packages": [
        "numpy==1.20.2",
        "requests"
    ]
}

作成するlayerの名前や実行環境などは別にjsonで書いてください。--layerオプションでファイルを指定できます。

layer.json
{
    "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オプションで設定ファイルを指定できます。

function.json
{
    "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に記してあるのでご覧ください!

どうぞご利用ください!

2
0
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
2
0