python-lambda-local と lambda-uploader を使ってローカル環境で Lambda 開発を行う
AWS の Lambda で開発を行う際、Web 管理コンソール上で開発 / デバッグするのは大変です。 python-lambda-local を使うとローカル環境で Lambda を実行出来、更に lambda-uploader を使うとローカル環境から簡単に Lambda へ関数をアップロードすることが出来ます。 Python の外部ライブラリを使う場合、外部ライブラリを含めた .zip ファイルを作成して Web 管理コンソールからアップロードする必要がありますが、lambda-uploader
を使えば .zip ファイルを作成することなく、必要なライブラリもアップロードしてくれます。 今回は python-lambda-local
と lambda-uploader
の使い方をメモしておきます。
インストールする¶
pip
でインストールします。
1 |
|
ディレクトリ構造¶
基本的には以下のようなディレクトリ構成をとります。
1 2 3 4 5 |
|
ファイルは各々以下の意味を持ちます。
No. | ファイル名 | 説明 |
---|---|---|
1 | event.json | python-lambda-local で Lambda 関数を実行する際、ハンドラへ渡すイベントの内容を定義する |
2 | lambda.json | lambda-uploader が Lambda へ関数をアップロードする際のパラメータを定義する |
3 | lambda_function.py | python-lambda-local で実行する Lambda 関数の本体 (ファイル名は任意で良い) |
4 | requirements.txt | lambda-uploader が Lambda へ関数をアップロードする際、同梱する外部ライブラリを定義する |
python-lambda-local でローカル実行を試す¶
必要なファイルを用意しながら作業していきます。
requirements.txt¶
lambda-uploader
は requirements.txt
に書かれている外部ライブラリを一緒に .zip して Lambda へアップロードしてくれるようです。 その為、requirements.txt
を用意しておきます。 後で用意する Python スクリプトでは requests
モジュールを使っているので、ここでは requirements.txt
に requests
を定義します。
1 |
|
外部モジュールをインストールしておきます。
1 |
|
event.json¶
Lambda 関数が実行される際、ハンドラへ渡すイベントの内容を定義します。 後で用意する Python サンプルスクリプトはイベントを利用しないものにしたので、ここでは定義自体は無い .json ファイルにしました。
1 |
|
lambda_function.py¶
Lambda 関数の本体です。 今回は以下のようなコードを用意しました。 サンプルなので例外処理などは未実装です。
1 2 3 4 5 6 7 8 9 |
|
この時点で用意した Lambda 関数をローカル環境で実行してみます。 python-lambda-local
の構文は以下の通りです。
1 |
|
今回の場合は以下のように指定します。
1 |
|
実際の実行例は以下の通りです。
1 2 3 4 5 6 7 |
|
lambda.json¶
lambda-uploader
でアップロードする Lambda 関数のパラメータを定義します。 Role の ARN は Web 管理コンソールから確認しますが、既存の Lambda 関数があれば aws lambda list-functions
や aws lambda get-function --function-name [FUNCTION]
を使って既存 Lambda 関数の情報を参考にすることも出来ます。 あと、runtime
は必須ではありませんが、省略すると python2.7
が指定されてしまうようだったので、ここでは明示的に python3.8
を指定しています。
1 2 3 4 5 6 7 8 9 10 |
|
用意が出来たら Lambda 関数をアップロードします。
1 |
|
実行例は以下の通りです。
1 2 3 4 |
|
これで Lambda 関数がアップロードされたはずです。