こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。
Python環境のAWS Lambdaを使うにあたってrequestsを使いたかったのですが、デフォルトのLambdaでは外部モジュールとなるrequestsは使えないようで。
これに気が付く前に、Lambdaを実行した結果が以下です。
"errorMessage": "Unable to import module 'lambda_function': No module named 'requests'",と出ていますね。
これを解消するために、レイヤーというものを作ってLambdaに追加する必要があるようで、その手順の備忘録です。
※Cloud9で用意するのが簡単という記事を拝見したのですが、私はうまくいかずでした・・・
手順
レイヤーを作るにあたり必要となるzipファイルを用意していきます。
まずローカルでpython環境を立ち上げます。
私はanacondaを起動してそれをVSCodeで開いて準備しました。
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のランタイムは以下でした。ローカル側とあっていますね。
以下のコマンドを実行して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としました。
AWSのLambdaの管理画面を開き、左にあるレイヤーを押下します。
レイヤーの作成を押下します。
任意の名前を入力して、先ほど作成したzipファイルをアップロードし、作成を押下します。
作成されたことを確認します。Arnは後で使います。
作成したレイヤーをLambdaにアタッチします。
Lambdaのコードが書かれているところを下にスクロールするとレイヤーという項目があります。レイヤーの追加を押下します。
ARN指定で、先ほど作成したレイヤーのARNを貼り付けます。
レイヤーの欄に追記されます。
テストでLambdaを動かすと今度はちゃんと動きました。
どんな関数を動かしているかは今後Qiitaに投げます。