LoginSignup
18

More than 3 years have passed since last update.

【Lambda】import requests が使えるようにする【python】

Posted at

やること

↓これを実行したら
image.png

↓こうなってほしい
image.png

↓しかし、こうなってしまう
image.png

{
  "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管理コンソールで作業します。
スクリーンショット 2019-09-29 21.43.44.png
「レイヤーの作成」で、先ほど作ったLayer.zipファイルを入れれば終わりです。

関数の準備

Layersを選択して
スクリーンショット 2019-09-29 21.48.17.png
「レイヤーの追加」押下で先ほど作ったレイヤーが出てきますので、選択。
スクリーンショット 2019-09-29 21.48.30.png

関数の作成

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"
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18