【AWS】Lambda関数のLayerを使ってみた

# 1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民です♪
(/・ω・)/

先日、AWSのLambda関数をテストしようとしたところ、以下のエラーが出ました。

|![010_エラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/cddbe3fd-68c5-f097-946d-11a59a1ca870.png)|
|:--|

どうやら、必要なライブラリが含まれていないことが原因のようですが、
他にも同じライブラリを使うLambda関数を作成予定だったため、
「いちいち設定するのは面倒だな・・・」と思いました。

解決する方法がないか、調べたところ、
**Lambda関数のLayerという設定を使うことで、
複数のLambda関数に同じライブラリを入れられるようです！**

そこで今回は**Lambda関数にLayerを設定する方法**を記事にしてみたいと思います♪
AWSやLambda関数について勉強中の方の参考になれば幸いです。
(*^^)v

# 2.用語の説明
## 2.1.Lambdaとは

LambdaとはAWSのサービスの1つで、コードを書くだけで即実行ができるサービスのことです。
サーバの設定等が不要なため、便利です。

ただし、15分以上続けて実行することはできないため、
複雑なアプリケーションの場合はEC2やECRでの実行が必要となります。

# 3.前提条件
前提条件を以下に示します。

* Lambda関数がpythonで書かれていること
* TeraTermがインストールされていること
* EC2が起動中であること

:::note warn
本記事はpythonで書かれたLambda関数を使用しますが、Node.jsでも同様にできると思います。
（後日、記事にするかも・・・）
:::

:::note warn
本記事はEC2にTeraTermで接続するため上記が前提条件となりますが、
コマンドプロンプト等でも同様の作業ができると思います。
:::

# 4.ライブラリが含まれたzipファイルを作成する
まずは、ライブラリが含まれているzipファイルを作成します。

4.1.TeraTermを起動し、EC2インスタンスにSSH接続します。

:::note info
EC2インスタンスを作成・起動してTeraTermからSSH接続する方法については、以下の記事をご確認ください。

https://qiita.com/Aichi_Lover/items/3471b1ba710e995ffd80
:::

4.2.以下のコマンドを実行し、pipコマンドを使用できるようにします。

```
mkdir python 
cd python
curl -O https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py --user
```

4.3.以下のコマンドを実行し、ライブラリをインストールします。

:::note info
例として、ライブラリ「phonenumbers」と「requests」をインストールします
:::

```
pip install -t ./ phonenumbers
pip install -t ./ requests
```

4.4.以下のコマンドを実行し、ライブラリが含まれたzipファイルを作成します。

```
cd ..
zip -r Layer.zip python
```

4.5.「ファイル」を選択し、「SSH SCP」を選択します。

|![110_SSH_SCP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/32091b02-9f58-2c70-dbf4-af965bed2c7d.png)|
|:--|

4.6.Fromには「/home/ec2-user/Layer.zip」を入力し、ToにはPC上のパスを入力し、「Receive」を選択します。

|![120_SSH_SCPの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/aae95636-92ba-4c10-d130-a67075242668.png)|
|:--|

4.7.前手順で指定したPC上のパスを確認し、ファイルがダウンロードされていることを確認します。

|![130_ダウンロードを確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/67692fe2-8612-e42d-066c-938a756918d1.png)|
|:--|

# 5.Layerを作成する
5.1.AWSにログインし、Lambda関数の管理画面から「レイヤー」を選択します。

|![140_レイヤーを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/d26416c8-79d1-739c-03c5-9282e5f7dd9f.png)|
|:--|

5.2.「レイヤーの作成」を選択します。

|![150_レイヤーの作成を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/7119162a-c237-4c18-b424-c4956ef6e916.png)|
|:--|

5.3.以下の表のとおりに設定し、「作成」を選択します。

|項目|設定内容|
|---|---|
|名前 | （任意） |
|説明 | （任意） |
|.zipファイルをアップロード | チェックあり |
|アップロード | （4節で作成したzipファイルを選択） |
|x86_64 | チェックあり |
|互換性のあるランタイム | （PythonX.Xを選択） |

|![160_レイヤ設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/b7fcf310-4d09-18d9-9ce6-e66f14ef12c8.png)|
|:--|

# 6.Lambda関数にLayerを設定する

6.1.ライブラリを入れたいLambda関数の管理画面を開き、下の方にある、「レイヤーの追加」を選択します。

|![170_レイヤの追加を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/aea590a3-915b-2e28-dc23-e6156d6b17ce.png)|
|:--|

6.2.「カスタムレイヤー」を選択し、5節で作成したレイヤーを選択します。

|![180_レイヤを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/20aa2ebe-ee4d-b69a-171a-0086f50dea80.png)|
|:--|

6.3.以上で設定は完了です。6節の手順を複数のLambda関数に実施することで、同じライブラリを設定することができます。

# 7.おわりに
ここまで読んで下さり、ありがとうございます！！！
(^^)

複数のLambda関数に同じライブラリが必要な時に、
Layerを使用すると設定の手間が省けてとても便利でした♪
次回も気になったことがあれば記事にしたいと思います！
(:3_ヽ)_