lambdaにpythonスクリプトを。Zipファイルから実行する関数を設定しました。virtualenv
と。Zipファイルに必要なパッケージをすべて含めました(Lib\site-packages
フォルダーから)。
以下は、スクリプトで使用されるパッケージのインポートステートメントです。
import requests
import boto3
import logging
import os
from botocore.exceptions import ClientError
from pprint import pprint
import pandas as pd
from datetime import datetime
import s3fs
lambda functionを実行しようとすると、次のエラーが表示されます。
START RequestId: e302cee0-3c51-453a-84c1-6eb1f9c123a0 Version: $LATEST
[ERROR] Runtime.ImportModuleError: Unable to import module 'export-dev': Unable to import required dependencies:
numpy: cannot import name 'WinDLL' from 'ctypes' (/var/lang/lib/python3.7/ctypes/__init__.py)
END RequestId: e302cee0-3c51-453a-84c1-6eb1f9c123a0
REPORT RequestId: e302cee0-3c51-453a-84c1-6eb1f9c123a0 Duration: 1.65 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 70 MB
私のコードでは、ctypes
、WinDLL
、または関連パッケージを明示的に使用していません。
コードにパッケージ化された依存関係の正しいバージョンがない場合、aws lambdaはエラーをスローします。依存関係は、OS(lambdaはLinuxで実行されます)およびpythonバージョンに依存する場合があります。
要件に基づいて、pandasエラーがスローされます。ラムダでpandasを実行するには、次のパッケージを含める必要があります。
pandas-Linux用にコンパイルされたコードで、ラムダが実行します。あなたはそれをここで見つけることができます https://pypi.org/project/pandas/#files あなたのpythonに一致する.whlファイルの 'manylinux'バージョンをダウンロードします=ラムダバージョン。
例えばpy3.7を実行している場合は、pandas-0.25.3-cp37-cp37m-manylinux1_x86_64.whlを取得します
.whlファイルの内容をラムダフォルダーのルートフォルダーに解凍します。これはラムダが必要とするライブラリのバージョンです
pandas 0.25+のメモ。pytzパッケージも含める必要があります。リクエストについては下記のメモを参照してください
numpy-ラムダコンソールから「レイヤー」をインストールすると、ラムダ(py3.7でテスト済み)に入ることができます。以下のスクリーンショットを参照してください。
リクエストのサイドノート
ここのパッケージ https://pypi.org/project/requests/#files には「none-any」バージョンしかありません。つまり、ソースをコンパイルする必要がないので、 pipから取得したバージョンを安全に含めることができます
これはpandasのpytz依存関係にも適用されます
awsコンソールにレイヤーをインストールするスクリーンショット
NumpyはCで書かれているため、Linuxディストリビューション用にビルドする必要があります。 サーバーレスフレームワーク を使用することをお勧めします。これは、Windowsラップトップを使用している場合に生活が大幅に簡素化されるためです。
serverless framework をインストールし、 docker があることを確認します
プロジェクトのルートに移動して実行します。
sls create --template aws-python
pythonアプリをデプロイするためのプラグインをインストールします:
serverless plugin install -n serverless-python-requirements
あなたのserverless.yml
ファイル追加:
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: non-linux
ラムダ関数へのパスを調整してください
functions:
hello:
handler: handler.hello
を使用して正しいライブラリで展開する
sls deploy