pip を使用してコンパイル済みコードを含む Python パッケージをインストールしたら、AWS Lambda 関数から「モジュールをインポートできません」というエラーが返されるようになりました。
簡単な説明
NumPy や pandas などのコンパイル済みコードを含む Python パッケージは、デフォルトでは必ずしも Lambda ランタイムと互換性があるとは限りません。pip を使用して、こうしたパッケージをインストールすると、そのパッケージでは、ローカルマシンのアーキテクチャ向けにモジュール名パッケージをダウンロードしてコンパイルします。Linux オペレーティングシステム (OS) を使用していない場合にそうすると、デプロイパッケージには Lambda Python ランタイムとの互換性がなくなります。
デプロイパッケージまたはレイヤーに Linux 以外の OS の Lambda との互換性を持たせるには、--platform パラメーターの値に manylinux2014 を指定して pip install コマンドを実行します。
注意: macOS の --platform タグは機能しません。たとえば、win_amd64 タグと macosx_10_6_intel タグでは、Lambda との互換性があるデプロイパッケージはインストールされません。
解決策
**注意:**次に示すプロシージャは、x86\ _64 アーキテクチャで動作する Lambda Python 3.9 ランタイムに pandas をインストールする方法の一例です。
-
コマンドプロンプトを開きます。続いて次の pip コマンドを実行し、バージョン 19.3.0 以降のバージョンの pip を使用していることを確認します。
pip --version
pip バージョン 19.3.0 より古いバージョンの pip を使用している場合は、次のように最新バージョンの pip にアップグレードしてください。
python3.9 -m pip install --upgrade pip
-
プリコンパイルした Python パッケージの .whl ファイルを依存関係として、次のように Lambda 関数のプロジェクトディレクトリにインストールします。
**重要:**my-lambda-function は、関数のプロジェクトディレクトリの名前に置き換えてください。
pip install \
--platform manylinux2014_x86_64 \
--target=my-lambda-function \
--implementation cp \
--python-version 3.9 \
--only-binary=:all: --upgrade \
pandas
-
Lambda 関数のプロジェクトディレクトリを開きます。macOS を使用している場合は、次のコマンドを実行します。
cd my-lambda-function
-
テキストエディターで、lambda_function.py という名前の新しいファイルを作成します。続いて、次のサンプルコードをコピーしてファイルに貼り付けます。
import numpy as np
import pandas as pd
def lambda_handler(event, context):
df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=["a", "b", "c"])
number = np.pi
print(df2)
print(number)
このファイルを Lambda 関数のプロジェクトディレクトリに保存します。
-
インストール済みのライブラリとソースコードをすべて含めた Lambda デプロイパッケージの .zip ファイルアーカイブを作成します。
zip -r ../my-deployment-package.zip .
my-deployment-package.zip ファイルアーカイブを使用して、Python 3.9 Lambda 関数を新規作成するか既存のものを更新します。手順については、「.zip ファイルアーカイブの Python Lambda 関数の操作」を参照してください。
**注意:**複数の関数で使用する Lambda レイヤーも、同様の手順で作成できます。たとえば、次のコマンドでは、arm64 アーキテクチャで動作する Lambda Python 3.9 ランタイムに pandas をインストールするための新しい Lambda レイヤーを作成します。
pip install \
--platform manylinux2014_aarch64 \
--target=./python/lib/python3.9/site-packages \
--implementation cp \
--python-version 3.9 \
--only-binary=:all: --upgrade \
pandas
関連情報
Lambda レイヤーの作成と共有