やりたいこと
- lambdaでapiを叩きたい。
- python3でやるためには必要なライブラリをlambdaにzipでアップロードする
前提
- lambdaのランタイムはpython 3.7
- awsのlambdaの画面で関数の基本情報(関数名、ランタイム、アクセス権限)を作成しておく
# やり方
-
アップロードするzipファイルを作成する
python3なので、仮想環境を作成する
実行コマンド
$ python3 -m venv dev
$ . dev/bin/activate
$ mkdir upload
$ cd upload/
$ pip install --upgrade pip
$ pip install requests -t ./
$ ls -la
total 8
drwxr-xr-x 14 ~ 省略 ~ .
drwxr-xr-x 6 ~ 省略 ~ ..
drwxr-xr-x 3 ~ 省略 ~ bin
drwxr-xr-x 7 ~ 省略 ~ certifi
drwxr-xr-x 10 ~ 省略 ~ certifi-2019.6.16.dist-info
drwxr-xr-x 43 ~ 省略 ~ chardet
drwxr-xr-x 10 ~ 省略 ~ chardet-3.0.4.dist-info
drwxr-xr-x 11 ~ 省略 ~ idna
drwxr-xr-x 8 ~ 省略 ~ idna-2.8.dist-info
drwxr-xr-x 21 ~ 省略 ~ requests
drwxr-xr-x 8 ~ 省略 ~ requests-2.22.0.dist-info
drwxr-xr-x 16 ~ 省略 ~ urllib3
drwxr-xr-x 8 ~ 省略 ~ urllib3-1.25.3.dist-info
*.dist-infoファイルは不要(というか、あると適切に読み込んでくれない)なので、全て削除する
$ rm -rf *.dist-info
lambda_function.pyを追加する
$ vim lambda_function.py
lambda上でapiを叩く処理を書き、ファイルを保存する。
zipにまとめる。zipファイル名は作成するlambda_function名と同じにする。
しないと、zipファイルを読み込みときに階層がずれてしまう。
$ zip -r hoge.zip ./*
- awsコンソール画面からzipファイルをアップロードする
- 問題なく読み込まれていたら、テストで確認する
注意点
-
zipファイルは3MB以内に抑える必要がある
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html -
zipにまとめるファイルのパーミッションは変更していないが、できるだけ755に合わせたほうが良さそう。