AWS  Lambda Layersを試してみる

##はじめに

Lambdaで共通処理を外出しできるLambda Layersが発表になりましたので試してみます
https://aws.amazon.com/jp/blogs/news/new-for-aws-lambda-use-any-programming-language-and-share-common-components/

イメージ的には以下の様な感じで、各Lambda関数にLayerを登録することができます
また、Layer自体もバージョン設定が可能です
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/f6fea760-4ed3-fc9e-5d7e-191ed6562ca9.png)

今回はPythonを使用します

サンプル(Layer側)

```python
import logging
def log(name, level):
    logger = logging.getLogger(name)
    logger.setLevel(level)
    formatter = '%(levelname)s : %(asctime)s : %(message)s'
    return logger
```

サンプル(呼び出し側)

```python
from logger import log;

logger = log('sample', 20)
def lambda_handler(event, context):
    logger.info('event: {}'.format(event))
```

##手順
###Lambda Layerの作成
Lambda Layerに登録するには、Zipファイルとしてアップロードする必要があるためローカルでファイルを作成し圧縮します
圧縮は、Pythonという名称でディレクトリを作成した上でその中にファイルを作成します

```
$ mkdir python
$ emacs python/logger.py 
$ zip -r python.zip python/
```

Lambdaの管理コンソールからLayersをクリックします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/99e1ce8f-54c2-8864-d1de-c74061c32e39.png)

Create layerをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/fef5347b-fafb-28c2-8dcc-e108ce1330b3.png)

名称を入力して、先程作成してzipファイルをアップロードします

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/2abe6a5d-e019-510d-843d-45f54cf0cddb.png)

作成が完了しました

###呼び出し側のLambda関数の作成
Create functionをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/08e4903b-0034-71d0-93ec-2deb65351f5f.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/f44c46cc-2055-1b47-aa13-1b2adfd0dfca.png)

Layerを登録するために、Layersをクリックして、Add a Layerをクリックします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/bb2b00ae-7af4-c08d-ffcc-138c1fd2d25c.png)

先程作成したLayerのARNを入力します

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/5984622b-a411-5b06-617c-25e61304939c.png)

Lambda関数を記述するために関数名をクリックします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/6d98afd9-e70c-056d-5a73-ed47f7dc4e6a.png)

サンプルコードを記述してSaveします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/cb696e46-c164-ad14-4d0e-7254e61342f8.png)

テストイベントの設定
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/8f663661-cd05-02cc-a2c2-008f9e8c80dd.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/1e8cc441-d0a4-1309-33e3-b5a7b85b37ce.png)

Testを実行し、ログ出力されていることを確認します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/7f41a905-eac1-21f0-85d0-1c256df5b5cb.png)

###Layerの修正
コードを修正してzipにします

```
$ zip -r python.zip python/
  adding: python/ (stored 0%)
  adding: python/logger.py (deflated 36%)
```

Create versionをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/de277175-e5b1-24f2-84eb-0af072828657.png)


先程のzipファイルを指定してCreate
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/54e00993-4eb4-4cb0-6290-d8057a4cc841.png)

この状況だとLambda関数に紐付いているLayerはバージョン1のままなのでバージョン2を登録します

バージョン2を登録します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/6687ae0a-b22d-9cfc-fe62-702638a2e272.png)

古いバージョンを削除します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/331e2b38-aad4-7282-ed9e-e776230349d8.png)

##お約束
投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。