やること
{
"errorMessage": "Unable to import module 'lambda_function': No module named 'requests'",
"errorType": "Runtime.ImportModuleError"
}
手順概要
- requests が動くようにLayerファイル(zip)を作る
- LambdaにLayerファイルをアップロードする
- Layerを使って関数を作る
Layerファイルを作ります
クライアントで作業します。
pipが動くようにして、外部モジュールを入れたものをzipしてaws管理コンソールから入れるだけ
例えば、amazon linux2で作業する場合は…
mkdir python/
cd python
yum -y install gcc gcc-c++ kernel-devel python-devel libxslt-devel libffi-devel openssl-devel
yum -y install python-pip
pip install -t ./ requests
cd python
cd ..
zip -r Layer.zip python/
zipをLambdaに登録します
AWS管理コンソールで作業します。
「レイヤーの作成」で、先ほど作ったLayer.zipファイルを入れれば終わりです。
関数の準備
Layersを選択して
「レイヤーの追加」押下で先ほど作ったレイヤーが出てきますので、選択。
関数の作成
lambda_function.py
import requests
def lambda_handler(event, context):
# テストサイトにGETを投げてみる
response = requests.get('https://httpbin.org/get', params={'foo': 'bar'})
return response.json()
実行結果
{
"args": {
"foo": "bar"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.24.0",
"X-Amzn-Trace-Id": "Root=1-5f43a5ad-a04c8100f8c999999e8e2e"
},
"origin": "913.931.998.950",
"url": "https://httpbin.org/get?foo=bar"
}