LoginSignup
1
1

AWS Lambdaでrequestsを使うためのセットアップ

Posted at

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

Python環境のAWS Lambdaを使うにあたってrequestsを使いたかったのですが、デフォルトのLambdaでは外部モジュールとなるrequestsは使えないようで。
これに気が付く前に、Lambdaを実行した結果が以下です。
"errorMessage": "Unable to import module 'lambda_function': No module named 'requests'",と出ていますね。

image.png

これを解消するために、レイヤーというものを作ってLambdaに追加する必要があるようで、その手順の備忘録です。
※Cloud9で用意するのが簡単という記事を拝見したのですが、私はうまくいかずでした・・・

手順

レイヤーを作るにあたり必要となるzipファイルを用意していきます。
まずローカルでpython環境を立ち上げます。
私はanacondaを起動してそれをVSCodeで開いて準備しました。
image.png
pythonとpipのバージョンは以下となります。Lambda側のPythonランタイムと併せましょう。

PS C:\Users\ohtsu\Documents\Python_dev> python -V
Python 3.12.3
PS C:\Users\ohtsu\Documents\Python_dev> pip3 -V
pip 23.3.1 from C:\Users\ohtsu\anaconda3\envs\any\Lib\site-packages\pip (python 3.12)

Lambdaのランタイムは以下でした。ローカル側とあっていますね。
image.png

以下のコマンドを実行してpythonフォルダを作成し、そこに移動してください。
pythonというフォルダ名はLambdaで指定されているようなので変えてはいけません。

PS C:\Users\ohtsu\Documents\Python_dev> mkdir python
PS C:\Users\ohtsu\Documents\Python_dev> cd .\python\

以下のコマンドを実行してrequestsをインストールします。
色々インストールされます。

PS C:\Users\ohtsu\Documents\Python_dev\python> pip3 install requests -t . 
Collecting requests
  Using cached requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)
Collecting charset-normalizer<4,>=2 (from requests)
  Using cached charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl.metadata (34 kB)
Collecting idna<4,>=2.5 (from requests)
  Using cached idna-3.7-py3-none-any.whl.metadata (9.9 kB)
Collecting urllib3<3,>=1.21.1 (from requests)
  Using cached urllib3-2.2.1-py3-none-any.whl.metadata (6.4 kB)
Collecting certifi>=2017.4.17 (from requests)
  Using cached certifi-2024.2.2-py3-none-any.whl.metadata (2.2 kB)
Using cached requests-2.31.0-py3-none-any.whl (62 kB)
Using cached certifi-2024.2.2-py3-none-any.whl (163 kB)
Using cached charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl (100 kB)
Using cached idna-3.7-py3-none-any.whl (66 kB)
Using cached urllib3-2.2.1-py3-none-any.whl (121 kB)
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests
Successfully installed certifi-2024.2.2 charset-normalizer-3.3.2 idna-3.7 requests-2.31.0 urllib3-2.2.1
PS C:\Users\ohtsu\Documents\Python_dev\python> ls


    ディレクトリ: C:\Users\ohtsu\Documents\Python_dev\python


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2024/05/04     22:20                bin
d-----        2024/05/04     22:20                certifi
d-----        2024/05/04     22:20                certifi-2024.2.2.dist-info
d-----        2024/05/04     22:20                charset_normalizer
d-----        2024/05/04     22:20                charset_normalizer-3.3.2.dist-info
d-----        2024/05/04     22:20                idna
d-----        2024/05/04     22:20                idna-3.7.dist-info
d-----        2024/05/04     22:20                requests
d-----        2024/05/04     22:20                requests-2.31.0.dist-info
d-----        2024/05/04     22:20                urllib3
d-----        2024/05/04     22:20                urllib3-2.2.1.dist-info

このディレクトリをzip化します。
今回はこんな感じでrequests.zipとしました。
image.png

AWSのLambdaの管理画面を開き、左にあるレイヤーを押下します。
image.png
レイヤーの作成を押下します。
image.png
任意の名前を入力して、先ほど作成したzipファイルをアップロードし、作成を押下します。
screencapture-ap-northeast-1-console-aws-amazon-lambda-home-2024-05-04-22_24_02.png
作成されたことを確認します。Arnは後で使います。
image.png
作成したレイヤーをLambdaにアタッチします。
Lambdaのコードが書かれているところを下にスクロールするとレイヤーという項目があります。レイヤーの追加を押下します。
image.png
ARN指定で、先ほど作成したレイヤーのARNを貼り付けます。
image.png
レイヤーの欄に追記されます。
image.png
テストでLambdaを動かすと今度はちゃんと動きました。
どんな関数を動かしているかは今後Qiitaに投げます。
image.png

1
1
0

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
1
1