AWS Lambdaレイヤーをローカル環境で構築する方法(Python)
はじめに
この記事では、Pythonを用いてAWS Lambdaレイヤーを作成し、ローカルでのLambda環境のコンテナを構築し、そこでレイヤーを作成してS3にプッシュする方法について説明します。
目次
1.AWS Lambdaレイヤーとは
2.前提条件
3.ローカルでのLambda環境の構築
4.Lambdaレイヤーの作成
5.LambdaレイヤーのS3へのプッシュ
6.Lambda関数でのレイヤーの利用
7.おまけ
1.AWS Lambdaレイヤーとは
AWS Lambda Layerは、Lambda環境下おいて共有ライブラリ、依存関係、その他のカスタムランタイムコンポーネントを管理するための機能になります。これらの共有コンポーネントをLambda関数から分離することにより、コードの管理と再利用を容易にすることができ、効率的な開発を実現することができます。
2.前提条件
AWS Lambdaレイヤーを構築する際には、Lambdaと同じランタイム環境での構築が必要となります。これは、ローカル環境で構築すると「バイナリ互換性」や「 実行環境の整合性」などで問題が発生する可能性があるためです。
このLambdaのランタイム環境としては、AmazonLinuxが利用されているため、EC2インスタンスを立ち上げて、レイヤーを作成することも可能ですが、今回はより手軽にローカルでコンテナを立ち上げてレイヤー構築を実施する方法をご紹介します。
3.ローカルでのLambda環境の構築
Dockerリポジトリからlambda環境のイメージをプルします。
docker pull public.ecr.aws/lambda/python:3.8
コンテナを起動して、コンテナ内にアクセスします。
docker run -it --entrypoint /bin/bash public.ecr.aws/lambda/python:3.8
4.Lambdaレイヤーの作成
今回はPyMuPDFという PDFのデータ抽出や変換を行うライブラリを題材として、レイヤーを作成します。
まず、任意のパスにpython
ディレクトリを作成します。
mkdir /path/to/layer/python
python
ディレクトリは、Lambdaがパッケージを認識するために必須となるため注意してください。
ライブラリをインストールします。
pip install PyMuPDF -t /path/to/layer/python
パッケージ化するため、zip
をインストールします。
yum insatll zip
レイヤーのパッケージングを実施します。
cd /path/to/layer
zip -r lambda_lauer.zip .
5.LambdaレイヤーのS3へのプッシュ
Lambdaレイヤーはローカルからでもアップロードできますが、容量に制限があるため、S3を利用する方法が推奨されます。
今回はコンテナから直接S3へアップロードする方法で実施します。
まず、レイヤー用のS3バケットを作成します。
S3バケットはAWSの全リージョンで一意の名称を付与しないといけないので、注意してください。
次にコンテナでAWS CLIを利用可能にするため、下記のコマンドを実行します。
pip install awscli
aws --version
awscliが無事にインストールされたら、認証情報を設定します
aws configure
※下記の内容を問われますので、環境に合わせて変更してくだしさい。
AWS Access Key ID [AWSアクセスキーを入力]:
AWS Secret Access Key [AWSシークレットアクセスキーを入力]:
Default region name [使用リージョンを入力]:
Default output format [出力形式を入力]:
認証情報を設定完了後、AWS S3へアップロードを行います。
aws s3 cp lambda_layer.zip s3://your-bucket-name/
6.Lambda関数でのレイヤーの利用
コンソールからLambdaを選択して、レイヤー作成画面に遷移します。
アップロード方法として、「AmazonS3からファイルをアップロードする」を選択し、S3から該当するレイヤーのオブジェクトURLを貼り付けます。
レイヤーを作成後は、Lambda関数の「コード」タブの最下部にある、レイヤーの追加を押下し、カスタムレイヤーを選択し、先ほど作成したレイヤーを設定します。
以上でLambda環境でLambdaレイヤーが使用できるようになりました。
EC2を立ち上げてレイヤーを構築する方法よりは効率的だと思いますので、活用してみてください。
今後Lambdaレイヤーを利用される方の参考になれば幸いです。
7.おまけ
上記ではローカルでコンテナを立ち上げてLambdaレイヤーを立ち上げる方法を紹介しましたが、よく使用されるライブラリなどは有識者の方がARNとして用意していてくれたりします。
構築内容にもよりますが、用途によってはこのように既に構築されているものを利用することも、効率的かもしれません。
下記のURLより確認できますので、よろしければ確認してみてください。
https://github.com/keithrozario/Klayers/tree/master/deployments
以上、記事をご覧いただき、ありがとうございました。