コンパイル済みバイナリを含む Python パッケージをデプロイパッケージに追加して、そのパッケージに Lambda との互換性を持たせるには、どうすればよいですか。

所要時間2分
0

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 をインストールする方法の一例です。

  1. コマンドプロンプトを開きます。続いて次の pip コマンドを実行し、バージョン 19.3.0 以降のバージョンの pip を使用していることを確認します。

    pip --version

    pip バージョン 19.3.0 より古いバージョンの pip を使用している場合は、次のように最新バージョンの pip にアップグレードしてください。

    python3.9 -m pip install --upgrade pip
  2. プリコンパイルした 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
  3. Lambda 関数のプロジェクトディレクトリを開きます。macOS を使用している場合は、次のコマンドを実行します。

    cd my-lambda-function
  4. テキストエディターで、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 関数のプロジェクトディレクトリに保存します。

  5. インストール済みのライブラリとソースコードをすべて含めた 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 レイヤーの作成と共有

AWS公式
AWS公式更新しました 10ヶ月前
コメントはありません