はじめに
AWS Lambdaは、サーバーレスアプリケーション開発において、とても重宝します。
15分でタイムアウトや、メモリサイズ・エフェメラルストレージに制限があったり、サードパーティーライブラリのインストールがLayerという方法から行うなど、それなりの制限やクセはありますが、アプリケーション開発で有用であることに疑いの余地はありません。
Lambda初心者であれば、まずはマネジメントコンソール(通称:マネコン)をポチポチ操作するところから始まると思いますが、CI/CIの観点などから、実際のサービス開発においてはこの方法は現実的ではなく、SAM(Serverless Application Model)を用いて、開発することになると思います。
このとき、
Lambdaを用いて開発行う -> AWS Upload -> 動作確認
は、動作確認するための時間的なコストが高く、手軽に試験することができません。
もっと簡単に・手軽にlambdaのソースコードが正しいか確認したい!!!
これを実現するために使用し、今回紹介するのがpython-lambda-local
です。
インストールする方法
python-lambda-local
はPyPiに登録されていますので、簡単にインストールすることができます。
以下のコマンドでインストールしてみてください。
pip install python-lambda-local
これで事前準備は完了です。
実行してみた
以下のようなディレクトリ構成があるとします。
sample-app/ ├── app │ └── lambda_function.py └── test └── event.json
各ファイルには、以下の内容が記載されているものとします。
def lambda_handler(event, context): return "Hello world"
{}
この状態の各ファイルにおいて、
% pwd /sample-app % ls app/ test/
の場所において、
python-lambda-local -f lambda_handler app/lambda_function.py test/event.json
と実行すると、
% python-lambda-local -f lambda_handler app/lambda_function.py test/event.json [root - INFO - 2023-09-09 14:59:41,124] Event: {} [root - INFO - 2023-09-09 14:59:41,124] START RequestId: ab09e349-14ac-4799-b649-f23ffda615a5 Version: [root - INFO - 2023-09-09 14:59:41,267] END RequestId: ab09e349-14ac-4799-b649-f23ffda615a5 [root - INFO - 2023-09-09 14:59:41,267] REPORT RequestId: ab09e349-14ac-4799-b649-f23ffda615a5 Duration: 0.03 ms [root - INFO - 2023-09-09 14:59:41,267] RESULT: Hello world
といった形で実行することができます!
上記のコマンドのPOINTは、
python-lambda-local -f <関数名> <対象のコード名> <関数内のeventで読むためのjsonファイル>
となります。
これで基本的な使い方はOKです!
環境変数を加える
lambdaの中で環境変数を加えているケースがあるかと思います。 この場合の実現方法も合わせて、お教えします。
1.ディレクトリ構成
. ├── app │ └── lambda_function.py ├── env │ └── env.json └── test └── event.json
2.env/env.json
の中身
{ "BUCKET_NAME": "my-bucket" }
3. lambda_function.py
の中身
import os def lambda_handler(event, context): bucket = os.environ["BUCKET_NAME"] print("bucket :",bucket) return "Hello world"
4. 実行コマンド
python-lambda-local -f lambda_handler app/lambda_function.py test/event.json -e env/env.json
といったように、-e
でファイルを指定してあげればOKです!
サンプルコード
Githubにあげておきます。
制限
あくまでも、動作確認のためのツールですので、デプロイなどはできないようです。 最新情報はこちらから、ご確認ください。
参考になった方はぜひ、コメントなどお待ちしております!