1
2

python-lambda-local を使って AWS Lambda 関数をローカル環境で実行する

Posted at

はじめに

Lambdaのプログラムをテストする際、毎回 Lambda 関数を更新して実行するのは面倒ではないですか?
そこで良い方法ないかなと調べていたところ、 python-lambda-local というツールを知りました。

仕様

Python 3.7+
今回試した環境のバージョンは 3.9.6 でした。

バージョン
$ python3 --version
Python 3.9.6

インストール

pip でインストールすれば完了です。

インストール
$ pip install python-lambda-local

オプション

使い方とオプションは以下になります。

使い方
$ python-lambda-local [-h] [-l LIBRARY_PATH] [-f HANDLER_FUNCTION]
                      [-t TIMEOUT] [-a ARN_STRING] [-v VERSION_NAME]
                      [-e ENVIRONMENT_VARIABLES] [--version]
                      FILE EVENT
オプション 説明
-h, --help ヘルプメッセージの表示
-f HANDLER_FUNCTION Lambda関数のハンドラー名。 デフォルトは "handler"
-t TIMEOUT, --timeout TIMEOUT Lambda関数がタイムアウトするまでの秒数。 デフォルトは 3 秒
-a ARN_STRING, --arn-string ARN_STRING  Lambda関数のARN
-v VERSION_NAME, --version-name VERSION_NAME Lambda関数のバージョン
-e ENVIRONMENT_VARIABLES, --environment-variables ENVIRONMENT_VARIABLES 環境変数
--version ツールのバージョン

実践

それでは実際にローカル環境でLambda関数を実行してみます。

Lambda関数の作成

まずはじめに以下の内容で Lambda 関数を作成します。

lambda_function.py
import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

eventファイルの作成

次に実行する際に引数として与える json を作成します。

event.json
{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

ファイルは以下のように同じディレクトリで用意してください。

ls
$ ls
event.json		lambda_function.py	print.py

Lambda関数の実行

以下のようにコマンドを実行してみてください。

実行
$ python-lambda-local -f lambda_handler lambda_function.py event.json
[root - INFO - 2024-05-30 23:23:27,592] Event: {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
[root - INFO - 2024-05-30 23:23:27,592] START RequestId: 0d3add3f-df1b-4adb-bf48-a046410fc137 Version: 
[root - INFO - 2024-05-30 23:23:27,716] END RequestId: 0d3add3f-df1b-4adb-bf48-a046410fc137
[root - INFO - 2024-05-30 23:23:27,716] REPORT RequestId: 0d3add3f-df1b-4adb-bf48-a046410fc137	Duration: 0.03 ms
[root - INFO - 2024-05-30 23:23:27,716] RESULT:
{'statusCode': 200, 'body': '"Hello from Lambda!"'}

末尾に {'statusCode': 200, 'body': '"Hello from Lambda!"'} が出力されていればOKです。
lambda_function1.py で記述した retrun が出力されています。

今度は先ほどのプログラムファイルに以下のように修正してください。

lambda_function.py
import json

def lambda_handler(event, context):

    # 以下 2 行追加
    for each_key, each_value in event.items():
        print("key:" + each_key + ",value" + each_value)

    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

改めて python-lambda-local を使って Lambda 関数を実行します。

実行
$ python-lambda-local -f lambda_handler lambda_function.py event.json
[root - INFO - 2024-05-30 23:36:55,281] Event: {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
[root - INFO - 2024-05-30 23:36:55,281] START RequestId: 2750a922-325d-443c-95d0-3c7ac550d438 Version: 
key:key1,valuevalue1
key:key2,valuevalue2
key:key3,valuevalue3
[root - INFO - 2024-05-30 23:36:55,416] END RequestId: 2750a922-325d-443c-95d0-3c7ac550d438
[root - INFO - 2024-05-30 23:36:55,416] REPORT RequestId: 2750a922-325d-443c-95d0-3c7ac550d438	Duration: 0.05 ms
[root - INFO - 2024-05-30 23:36:55,416] RESULT:
{'statusCode': 200, 'body': '"Hello from Lambda!"'}

今度は print で指定した event.json の内容も出力されることが確認できました。

おわりに

python-lambda-local のおかげで Lambda のプログラムがとても簡単になりました。
似たようなツールはまだあるみたいなので、時間がある時に他も試してみたいと思います。


参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2