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

AWS Lambda layersを作成/管理できるツールlamblayerを作りました！
現在はPythonにのみ対応しています。

https://github.com/YU-SUKETAKAHASHI/lamblayer

## できること
- 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を作成することの２種類ができます。

### 1. pipでインストール可能なパッケージのビルド済みlayerの作成
**こんな感じにパッケージ名とバージョンをjsonで書けば、
`lamblayer creage --packages packages.json`でLambdaで実行可能なビルド済みのlayerが作成されます。
これがとっても便利で、Dockerを立ち上げてpip installしてzipつくって...という作業から解放されます。最高！**
内部では[外部ライブラリのLambda Layerを生成するAPIをLambdaで作ってみた【Python】](https://qiita.com/KenichiHiguchi/items/d16b9a8b0c2f10d035f6)で紹介されているAPIを叩いています。

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

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

```json:layer.json
{
    "LayerName": "numpy_requests",
    "Description": "numpy==1.20.2, requests",
    "CompatibleRuntimes": [
        "python3.7",
        "python3.8",
        "python3.9"
    ],
    "LicenseInfo": ""
}
```
※現在はまだ[外部ライブラリのLambda Layerを生成するAPIをLambdaで作ってみた【Python】](https://qiita.com/KenichiHiguchi/items/d16b9a8b0c2f10d035f6)のAPIを公開していないため、この機能は利用できません。ご興味があれば上述の記事中のGoogleフォームよりご連絡ください！

### 2. ローカルのディレクトリからlayerを作成する
ローカルのディレクトリを指定して、自作パッケージのlayerを作成することもできます。
`lamblayer create --src my_package`

layerを作成するときの地味な[沼ポイント](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html)として、ファイルたちを`python`ディレクトリ以下に配置する必要がありますが、それもlamblayerがやってくれます。
`--wrap-dir`オプションでディレクトリ名を指定してあげれば、`--src`以下のファイルをラップしたlayerを作成することができます。
これで自分でpythonフォルダに配置し直す手間はありません。
`lamblayer create --src my_package --wrap-dir1 python`


## Set Layer
`lamblayer set`でLambdaにlayerをセットすることができます。こちらは`--function`オプションで設定ファイルを指定できます。

```json: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に記してあるのでご覧ください！

https://github.com/YU-SUKETAKAHASHI/lamblayer

どうぞご利用ください！