LoginSignup
1
2

【Python】Lambda Layerの作成方法

Posted at

Lambda Layerを作成したいがめんどくさい

Lambda LayerはAWS Lambdaに標準で用意されていないライブラリや自分で作成した関数などを取り込む際に利用します。
一見zipファイルを作成してアップロードするだけなんですが、いくつか落とし穴があります

  • Amazon Linuxで作成する必要がある(場合がある)
    • LambdaはAmazonLinuxで動いている
    • macOSなどでインストールしたものがAmazonLinuxで動かない場合があるため
  • 求められるディレクトリ構造が実はある
  • apiでのzipアップロードはファイルサイズの制限がある

などなどで躓いたのでやり方をまとめておきます

AmazonLinuxでのpython実行環境の用意

構築方法は別記事にまとめました。ローカル環境(macOSやWindows)でインストールしたライブラリをアップロードすると、動くときもありますが動かないときもあります。仮に動いたとしても、基本的にはAmazonLinuxで作成するほうが良いでしょう。
pythonはLambdaで使用するバージョンと合わせる必要があります。

ディレクトリ構成

適当にディレクトリを作成してもLambdaが読み取ってくれません。具体的な構成は以下のリンクを参考にすると良いでしょう。

バージョンを含める場合は

python/lib/python3.x/site-packages

といった構成にする必要がありますが。単一のバージョンで良ければpythonという名称のディレクトリを作成してそこにライブラリをインストールする必要があります。
よくわからない仕様にも思えますが、実際にLambdaで使うときはこのzipを解凍して、ある程度ディレクトリ構成を統一させる必要があるからかなと思っています。とはいえこのような仕様はもっと大きくはっきりと書いてほしいなと言う個人的な思いはあります。

インストール方法

作業場所は任意でOKです。
まずはpythonディレクトリを作成します。

mkdir python

続いてインストールするライブラリ一覧を書き込むrequirements.txtを作成します。

requirements.txt
pandas
requests

今回は基本的なライブラリのpandasとrequetsを対象としました。

pip install -r requirements.txt -t ./python

次にインストールしたディレクトリをzipファイル化します。

zip -r python.zip python

Lambda Layerにアップロード

今回はすでに作成されているレイヤーにアップロードする前提でいきます。
アップロードする際は

aws lambda publish-layer-version \
	--layer-name hoge-layer-name \
	--description "" \
	--zip-file fileb:///path/to/python.zip \
	--compatible-runtimes python3.12 --region ap-northeast-1

これで完了するのですが、api経由だとファイルサイズが50MBの制限があります。
この制限を超えたアップロードするには一旦ファイルをS3に置く必要があります。

aws s3 cp /path/to/python.zip s3://backet_name/path/to/python.zip

そしてpublic-layer-versionコマンドで、先程アップロードしたS3オブジェクトを参照させます。

aws lambda publish-layer-version \
	--layer-name hoge-layer-name \
	--description "" \
	--content S3Bucket=bucket_name,S3Key=path/to/python.zip \
	--compatible-runtimes python3.12 --region ap-northeast-1

これにてlayerの作成が完了します。ライブラリが増えるとあっという間に50MBを超えるので面倒ですが、S3を経由させます。
より簡単なやり方あったら知りたいです。よろしくお願いします。

1
2
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
1
2