Run lambda function on local machine
Please use a newly created virtualenv of Python 2.7 or Python 3.6 .
Within virtualenv, run the following command.
$ pip install python-lambda-local
This will install the package with name python-lambda-local
in the
virtualenv. Now you can use the command python-lambda-local
to run
your AWS Lambda function written in Python on your own machine.
Run python-lambda-local -h
to see the help.
usage: python-lambda-local [-h] [-l LIBRARY_PATH] [-f HANDLER_FUNCTION] [-t TIMEOUT] [-a ARN_STRING] [-v VERSION_NAME] [--version] FILE EVENT Run AWS Lambda function written in Python on local machine. positional arguments: FILE lambda function file name EVENT event data file name optional arguments: -h, --help show this help message and exit -l LIBRARY_PATH, --library LIBRARY_PATH path of 3rd party libraries -f HANDLER_FUNCTION, --function HANDLER_FUNCTION lambda function handler name, default: "handler" -t TIMEOUT, --timeout TIMEOUT seconds until lambda function timeout, default: 3 -a ARN_STRING, --arn-string ARN_STRING ARN string for lambda function -v VERSION_NAME, --version-name VERSION_NAME lambda function version name --version print the version of python-lambda-local and exit
Suppose your project directory is like this:
├── event.json ├── lib │ ├── rx │ │ ├── abstractobserver.py │ │ ├── ... (package content of rx) ... │ │ └── testscheduler.py │ └── Rx-1.2.3.dist-info │ ├── DESCRIPTION.rst │ ├── METADATA │ ├── metadata.json │ ├── pbr.json │ ├── RECORD │ ├── top_level.txt │ ├── WHEEL │ └── zip-safe └── test.py
The handler's code is in test.py
and the function name of the
handler is handler
. The source depends on 3rd party library rx
and it is installed in the directory lib
. The test event in json
format is in event.json
file.
from __future__ import print_function
from rx import Observable
def handler(event, context):
xs = Observable.from_(range(event['answer']))
ys = xs.to_blocking()
zs = (x*x for x in ys if x % 7 == 0)
for x in zs:
print(x)
{
"answer": 42
}
Within the project root directory, you can run the lambda function with the following command
python-lambda-local -l lib/ -f handler -t 5 test.py event.json
The output will be like:
[root - INFO - 2017-04-19 12:39:05,512] Event: {u'answer': 42} [root - INFO - 2017-04-19 12:39:05,512] START RequestId: b918f9ae-0ca1-44af-9937-dd5f9eeedcc1 0 49 196 441 784 1225 [root - INFO - 2017-04-19 12:39:05,515] END RequestId: b918f9ae-0ca1-44af-9937-dd5f9eeedcc1 [root - INFO - 2017-04-19 12:39:05,515] RESULT: None [root - INFO - 2017-04-19 12:39:05,515] REPORT RequestId: b918f9ae-0ca1-44af-9937-dd5f9eeedcc1 Duration: 2.27 ms