1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民です♪
(/・ω・)/
先日、AWSのLambda関数をテストしようとしたところ、以下のエラーが出ました。
どうやら、必要なライブラリが含まれていないことが原因のようですが、
他にも同じライブラリを使うLambda関数を作成予定だったため、
「いちいち設定するのは面倒だな・・・」と思いました。
解決する方法がないか、調べたところ、
Lambda関数のLayerという設定を使うことで、
複数のLambda関数に同じライブラリを入れられるようです!
そこで今回はLambda関数にLayerを設定する方法を記事にしてみたいと思います♪
AWSやLambda関数について勉強中の方の参考になれば幸いです。
(*^^)v
2.用語の説明
2.1.Lambdaとは
LambdaとはAWSのサービスの1つで、コードを書くだけで即実行ができるサービスのことです。
サーバの設定等が不要なため、便利です。
ただし、15分以上続けて実行することはできないため、
複雑なアプリケーションの場合はEC2やECRでの実行が必要となります。
3.前提条件
前提条件を以下に示します。
- Lambda関数がpythonで書かれていること
- TeraTermがインストールされていること
- EC2が起動中であること
本記事はpythonで書かれたLambda関数を使用しますが、Node.jsでも同様にできると思います。
(後日、記事にするかも・・・)
本記事はEC2にTeraTermで接続するため上記が前提条件となりますが、
コマンドプロンプト等でも同様の作業ができると思います。
4.ライブラリが含まれたzipファイルを作成する
まずは、ライブラリが含まれているzipファイルを作成します。
4.1.TeraTermを起動し、EC2インスタンスにSSH接続します。
EC2インスタンスを作成・起動してTeraTermからSSH接続する方法については、以下の記事をご確認ください。
4.2.以下のコマンドを実行し、pipコマンドを使用できるようにします。
mkdir python
cd python
curl -O https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py --user
4.3.以下のコマンドを実行し、ライブラリをインストールします。
例として、ライブラリ「phonenumbers」と「requests」をインストールします
pip install -t ./ phonenumbers
pip install -t ./ requests
4.4.以下のコマンドを実行し、ライブラリが含まれたzipファイルを作成します。
cd ..
zip -r Layer.zip python
4.5.「ファイル」を選択し、「SSH SCP」を選択します。
4.6.Fromには「/home/ec2-user/Layer.zip」を入力し、ToにはPC上のパスを入力し、「Receive」を選択します。
4.7.前手順で指定したPC上のパスを確認し、ファイルがダウンロードされていることを確認します。
5.Layerを作成する
5.1.AWSにログインし、Lambda関数の管理画面から「レイヤー」を選択します。
5.2.「レイヤーの作成」を選択します。
5.3.以下の表のとおりに設定し、「作成」を選択します。
項目 | 設定内容 |
---|---|
名前 | (任意) |
説明 | (任意) |
.zipファイルをアップロード | チェックあり |
アップロード | (4節で作成したzipファイルを選択) |
x86_64 | チェックあり |
互換性のあるランタイム | (PythonX.Xを選択) |
6.Lambda関数にLayerを設定する
6.1.ライブラリを入れたいLambda関数の管理画面を開き、下の方にある、「レイヤーの追加」を選択します。
6.2.「カスタムレイヤー」を選択し、5節で作成したレイヤーを選択します。
6.3.以上で設定は完了です。6節の手順を複数のLambda関数に実施することで、同じライブラリを設定することができます。
7.おわりに
ここまで読んで下さり、ありがとうございます!!!
(^^)
複数のLambda関数に同じライブラリが必要な時に、
Layerを使用すると設定の手間が省けてとても便利でした♪
次回も気になったことがあれば記事にしたいと思います!
(:3_ヽ)_