7
1

AWS Lambdaレイヤーをローカル環境で構築する方法(Python)

Last updated at Posted at 2023-12-05

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の全リージョンで一意の名称を付与しないといけないので、注意してください。
スクリーンショット 2023-12-04 22.34.43.png

次にコンテナで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/

スクリーンショット 2023-12-04 23.15.19.png

6.Lambda関数でのレイヤーの利用

コンソールからLambdaを選択して、レイヤー作成画面に遷移します。
アップロード方法として、「AmazonS3からファイルをアップロードする」を選択し、S3から該当するレイヤーのオブジェクトURLを貼り付けます。
スクリーンショット 2023-12-04 23.15.59.png

レイヤーを作成後は、Lambda関数の「コード」タブの最下部にある、レイヤーの追加を押下し、カスタムレイヤーを選択し、先ほど作成したレイヤーを設定します。
スクリーンショット 2023-12-04 23.19.55.png

以上でLambda環境でLambdaレイヤーが使用できるようになりました。
EC2を立ち上げてレイヤーを構築する方法よりは効率的だと思いますので、活用してみてください。
今後Lambdaレイヤーを利用される方の参考になれば幸いです。

7.おまけ

上記ではローカルでコンテナを立ち上げてLambdaレイヤーを立ち上げる方法を紹介しましたが、よく使用されるライブラリなどは有識者の方がARNとして用意していてくれたりします。
構築内容にもよりますが、用途によってはこのように既に構築されているものを利用することも、効率的かもしれません。
下記のURLより確認できますので、よろしければ確認してみてください。
https://github.com/keithrozario/Klayers/tree/master/deployments
以上、記事をご覧いただき、ありがとうございました。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1