LoginSignup
3
2

AWS LambdaでPythonの外部ライブラリを設定する方法

Posted at

概要

Lambdaでは、Python標準ライブラリとAWS SDK for Pythonしか使用できません。
また、Lambda上ではpipによる外部ライブラリのインストールもできません。

そのため、必要なライブラリは自分で調達してくる必要があります。
ここでは、外部ライブラリの調達と設定方法について解説します。

手段

Lambdaでは外部ライブラリを配置できる場所が2つあります。

  • Lambdaレイヤー
  • Lambda関数ごとのコード置き場(フォルダ/ファイル構成)

配置場所はどちらでもよいのですが、枯れた技術(アップデートの頻度が少ないモジュールや外部ライブラリ)はLambdaレイヤー配置するのが、一般的な作法なようです1
今回はLambdaレイヤーに外部ライブラリを配置する方法を取ります。

外部ライブラリを取得する

外部ライブラリは公開先からダウンロードしてよいですが、pip install -tでローカルに落としてしまうのが手っ取り早いです。

AWS環境で完結させるなら、外部ライブラリ調達用にCloud9を1つ作成し、以下を順番に実施すればOKです。
以下、python-joseの最新バージョンをインストールしています。

mkdir lib & cd lib # このフォルダ名は何でもOKです
mkdir python & cd python # Lambdaレイヤーに必要なpythonフォルダの作成
pip install python-jose -t .

Collecting python-jose
  Downloading python_jose-3.3.0-py2.py3-none-any.whl (33 kB)
Collecting rsa
  Downloading rsa-4.9-py3-none-any.whl (34 kB)
Collecting pyasn1
  Downloading pyasn1-0.5.1-py2.py3-none-any.whl (84 kB)
     |████████████████████████████████| 84 kB 3.0 MB/s             
Collecting ecdsa!=0.15
  Downloading ecdsa-0.18.0-py2.py3-none-any.whl (142 kB)
     |████████████████████████████████| 142 kB 14.6 MB/s            
Collecting six>=1.9.0
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, pyasn1, rsa, ecdsa, python-jose
Successfully installed ecdsa-0.18.0 pyasn1-0.5.1 python-jose-3.3.0 rsa-4.9 six-1.16.0

フォルダ階層はlib/pythonとしていますが、libの部分は他の名前でもOKです。
pythonはLambdaレイヤーにアップロードするフォルダ名称と必須なので、ここは変えないようにしてください。

今回インストールしたpython-joseでは、アップデートにより依存関係が変わっています(筆者の場合、v3.1.0->v3.3.0でecdsaが新たに追加)。
公開先からインストールすると依存関係は含まれない場合があるので、依存関係を含むようにpip installするのが簡単かと思います。

外部ライブラリを固める

インストールした外部ライブラリをzipで固めます。

cd ../ # libフォルダへ移動
zip -r python-jose.zip python

作成したpython-jose.zipをダウンロードします。

Lambdaレイヤーへのアップロード

再度にダウンロードしたzipファイルを、レイヤーにアップロードすればOKです。
Lambdaレイヤーでは特に注意すべきポイントはないですが、互換性のあるランタイムをきちんと設定しておくことで、レイヤーと互換性のあるラインタイムLambda関数でレイヤーを追加する場合にカスタムレイヤーで表示されます。

image.png

上記のカスタムレイヤーのドロップダウンボタンから、レイヤーを簡単に選択できます。

まとめ

AWS LambdaでPythonの外部ライブラリを設定する方法をご紹介しました。
個人的には外部ライブラリはLambdaレイヤーに配置する方針が良いと思いますが、1つのLambda関数につき追加できるLambdaレイヤーの最大数は5個までの制限があります。
その場合はコード側に置いたり、複数の外部ライブラリをまとめたりしておきましょう。

  1. 確かAWS DevDay2023の講演で聞きました。ただし、Lambdaライブラリは最大5個の制限があるので、ご注意ください。

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