AWS lambdaをローカルのpythonで開発する方法
Author: 水卜
Author: 水卜
ディレクトリ構成は以下。
|--lambda_function.py
|--requirements.txt
|--Dockerfile
import json
def lambda_handler(event, context):
return event
FROM lambci/lambda:build-python3.6
ENV AWS_DEFAULT_REGION ap-northeast-1
ADD . .
CMD pip3 install -r requirements.txt -t /var/task && \
zip -9 deploy_package.zip lambda_function.py && \
zip -r9 deploy_package.zip *
requests
$ docker run -v "$PWD":/var/task lambci/lambda:python3.6 lambda_function.lambda_handler '{"key":"value"}'
$ docker build -t mylambda .
$ docker run -v "$PWD":/var/task mylambda
以下のファイルが作成される。
$ tree -L 1
.
├── Dockerfile
├── __pycache__
├── bin
├── certifi
├── certifi-2019.11.28.dist-info
├── chardet
├── chardet-3.0.4.dist-info
├── deploy_package.zip
├── idna
├── idna-2.8.dist-info
├── lambda_function.py
├── prv-lamb.iml
├── requests
├── requests-2.22.0.dist-info
├── requirements.txt
├── urllib3
└── urllib3-1.25.7.dist-info
deploy_package.zip
がlambdaにアップロードするファイル。
ローカルでの開発をpipenvで行い、lambdaにデプロイする時にPipenvのパッケージをrequirements.txtに変換することも可能。
$ brew install pipenv
$ pipenv --python 3.7
$ pipenv shell
$ python --version # 確認
$ pipenv lock -r
# 開発用
$ pipenv lock -r --dev
pipenv lock -r
でpipfileをrequirements.txtに変換できます。
後ろに> requirements.txt
を書く必要があるかも