AWS lambdaをローカルのpythonで開発する方法
 Author: 水卜

docker

準備

ディレクトリ構成は以下。

|--lambda_function.py
|--requirements.txt
|--Dockerfile
  • lambda_function.py
import json

def lambda_handler(event, context):
    return event
  • Dockerfile
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 *
  • requirements.txt
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

ローカルでの開発をpipenvで行い、lambdaにデプロイする時にPipenvのパッケージをrequirements.txtに変換することも可能。

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を書く必要があるかも