Python で AWS Lambda 使う時に割と面倒だったので手軽に Upload できるように構成を作っておく

2020/12/02に公開

構成

最終的には下記のような構成になる。

.
├── build.sh
├── dist/
├── event.json
├── lambda_function.py
├── package/
├── requirements.txt
└── venv/

最初に

最初にやる事は PJ dir を作成し、諸々をセットアップする事なので、下記手順で用意する。
とりあえず最初に最終構成を全部用意する。

$ mkdir sample
$ cd sample
$ python -m venv venv
$ . ./venv/bin/acrivate
$ pip install python-lambda-local
$ pip freeze > requirements.txt
$ mkdir dist
$ mkdir package
$ touch lambda_function.py
$ touch event.json
$ touch build.sh
$ chmod 755 build.sh

requirements.txt までを用意したら、次はビルド用 (Upload 用の zip を作るやつ) のスクリプトを作成する。

build.sh

#!/bin/bash

rm -rf package/*
cp *.py package/
pip install -r requirements.txt -t ./package/

cd ./package/
zip -r ../dist/lambda.zip .

次に実行したい Lambda スクリプトを実装する。

lambda_function.py

def lambda_handler(event: dict, context):
  return {
    'statusCode': 200,
    'body': json.dumps(
      'message': 'Ok',
    }),
    'isBase64Encoded': False
  }

ローカルテストする時に event.json を使う事がある (POST などで) ので、その場合は event.json の内容もセットアップしておく。

テストする時は下記コマンドで実行できる。

(activate) $ python-lambda-local -f lambda_handler lambda_function.py event.json

ビルド

zip ファイルのビルドは build.sh を実行する事で ./dist/lambda.zip に生成される。

$ ./build.sh

後は生成された zip を Lambda にアップロードしたら完了。

Discussion