【2024年】AWS LambdaへのPythonライブラリのインストール

【2024年】AWS LambdaへのPythonライブラリのインストール プログラミング
No module named 'pkg_resources'

AWS LambdaのPython 3.12では、なんとsetuptoolsがインストールされていません。
そのため、デフォルト状態で上記モジュールのインポートに失敗してしまいます。

このモジュールが利用できないと、そもそもインストール済みのライブラリを確認すらできません。。。
そのため、AWS Lambdaへsetuptoolsをインストールする必要があります。

そこで、今回はAWS LambdaへのPythonライブラリのインストールを説明します。
もちろん、他のPythonライブラリでも同じようにインストール可能です。

AWS LambdaへのPythonライブラリのインストールについて

最初に言っておくと、Lambda環境へ直接インストールはできません。
つまり、次のコマンドで完了という訳にはいきません。

pip install setuptools

その代わりの方法が、複数あります。
今回は、その中からカスタムレイヤーを用いる方法を説明します。

これさえ覚えておけば、望むライブラリをLambda環境で利用できるようになります。
そのためには、レイヤーを自分で作成するする必要があります。

レイヤーの作成

レイヤーとは、ライブラリやカスタムランタイムなどの依存関係を管理するための機能です。
そして、レイヤーは作成したLambda関数とは独立して存在することができます。

また、自作したレイヤーをカスタムレイヤーと呼んでいます。
そのレイヤーとLambda関数を関連付けることが可能です。

関連付けられたら、Lambda関数からそのレイヤー内のライブラリを利用できるようになります。
これで、大枠はイメージできたと思います。

AWS Lambdaのメニュー内に「レイヤー」とあります。
ここでレイヤーを管理できます。

新規にレイヤーを作成するには、次のボタンをクリックします。

クリックすると、次の画面を確認できます。

ここで注目すべきは、「.zip ファイルをアップロード」という文言です。

ZIPファイルの作成

ZIPファイルには、必要な依存関係やライブラリを含む必要があります。
ここでは、そのZIPファイルの作成方法を説明します。

ポイントは、Linuxやmac OSの環境で作成しましょうということです。
基本的には、Windowsで作成すると上手くいきません。

その理由は、Lambdaの実行環境はAmazon Linuxをベースにしているからでしょう。
そうは言っても、Windowsしか環境がない場合もあるかもしれません。

そのような場合は、WSLを利用しましょう。
あと、Pythonのバージョンには要注意です。

基本的には、ランタイムとして選択したバージョンを用意する必要があります。
現状なら、以下のバージョンが利用可能となっています。

UbuntuへのPythonのインストールについては、次の記事で解説しています。

環境面で準備ができたら、あとはもう簡単です。
まずは、Pythonのバージョンを指定して仮想環境を用意します。

Ubuntuなら、次のようなコマンドでPythonのバージョンを指定できます。

/usr/local/bin/python3.12 -m venv venv

その仮想環境を利用した状態で、以下のコマンドを実行します。

$ /usr/local/bin/python3.12 -m venv tmp_venv
$ source tmp_venv/bin/activate
$ mkdir python
$ pip install setuptools -t python
$ zip -r setuptools_layer.zip python

「ZIPファイルには、必要な依存関係やライブラリを含む」
このことを実行しているだけです。

このようにして作成した「setuptools_layer.zip」が、アップロードするZIPファイルになります。

なお、今回は「setuptools」のみが対象となっています。
それ以外のライブラリも「pip install 〇〇〇 -t .」でインストールできます。
容量に気を付ければ、複数のライブラリを含めることが可能ということです。

Lambda関数へのレイヤー追加

今回は、次のような条件でレイヤーを作成しています。
もちろん、先ほど作成したZIPファイルをアップロードします。

作成できたら、「レイヤー」メニューで確認できます。

ここまで確認できたら、Lambda関数を関連付けましょう。
対象となるLambda関数を選択します。

画面の最下部に「レイヤー」の項目があります。
そこにある、次のボタンをクリック。

「レイヤーを追加」画面に遷移します。

カスタムレイヤーを選択します。
そして、レイヤー名とそのバージョンを選びます。

問題なければ、「追加」ボタンをクリック。

これで、Lambda関数とレイヤーの関連付けが完了です。

Lambda関数の詳細画面では、このような表示を確認できます。
「Layers」が「(1)」となっています。

Lambda関数の動作確認(ライブラリ一覧の確認)

Lambda関数のコードは、以下となります。

lambda_function.py

import json
import pkg_resources

def lambda_handler(event, context):
    # TODO implement
    
    installed_packages = [(d.project_name + ' ' + d.version) for d in pkg_resources.working_set]
    
    return {
        'statusCode': 200,
        'body': json.dumps(installed_packages)
    }

Python 3.12では、「import pkg_resources」でエラーが出ていました。
しかし、setuptoolsをインストール済みなので、もうエラーは出ないはずです。

テストした結果は、以下。

大丈夫そうです。
このままでは見にくいので、レスポンスをブラウザで表示してみましょう。

ちゃんと出ていますね。
setuptools以外は、デフォルトでインストールされているライブラリになります。

まあ、必要最低限という感じなのでしょうね。

タイトルとURLをコピーしました