はじめに
LambdaにEFSをマウントできるようになりました。これによりEFSにセットアップしたPythonのライブラリをLambdaにimportできるようになりました。
これまでは、LambdaにPython標準以外のライブラリをimportしたい場合は、Lambda layer に固めてアップロードする方法しかありませんでした。しかし、この方法には 圧縮して50MB以下、解凍後250MB以下というサイズの制限
があります。このため、サイズの大きいライブラリを複数使うといったことができませんでした。そのため、少し規模が大きいシステムだと、一部処理をdockerに外出しするなどの対応が必要となり、Lambdaだけでは完結しませんでした。
しかし、LambdaにEFSをマウントできるようになったため、この問題が解消します。EFSにインストールしたライブラリをLambdaにimportできるようになりました。
how to
概要
- EFS作成
- EFSアクセスポイントを作成
- EFSを作業用にEC2にマウント
- EFSにPythonとライブラリをインストール
- Lambdaにimport
手順
-
EFS作成
- 作成手順
省略 - 注意
Lambdaと同じVPCを指定
セキュリティグループ port:2049 許可にLambdaのセキュリティグループを指定
- 作成手順
-
EFSアクセスポイント(クライアントアクセス)を作成
所有者ユーザーID: 1001
所有者グループID: 1001
アクセス許可: 777
パス(ディレクトリ)はここでは/lambda
を設定 -
EFSを作業用EC2にマウント
sudo yum install -y amazon-efs-utils cd /mnt sudo mkdir efs sudo mount -t efs fs-xxxxx:/ efs
-
EFSにPythonとライブラリをインストール
ここでは Python3.8.1 と pandas をインストールsudo yum -y install gcc openssl-devel bzip2-devel libffi-devel wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz tar xzf Python-3.8.1.tgz cd Python-3.8.1 sudo ./configure --enable-optimizations sudo make altinstall # check python3.8 --version pip3.8 --version cd /mnt/efs pip3.8 install --upgrade --target lambda/ pandas
-
Lambda関数を設定
VPCに所属させる必要がある
Lambdaの実行roleにポリシーAmazonElasticFileSystemClientReadWriteAcces
を追加
EFSを追加 -
Lambdaでimport
こんなかんじでimportできる。import sys sys.path.append("/mnt/efs") import pandas as pd