Serverless
To be as portable as possible, even with severless, we use serverless framework. It allows us to deploy our functions across multiple clouds like AWS, GCP, Azure and IBM OpenWisk.
Setup & Installation
Make sure you have your Developer Environment Setup
npm install serverless -g
In your repo create your serverless template for Python
mkdir notes-app-api
cd notes-app-api
sls create --template aws-python3
Compile non-pure Python modules (e.g. C?)
To compile non-pure Python modules, install Docker, the Lambda Docker Image and serverless-python-requirements . Enable dockerizePip in serverless.yml and serverless deploy
again.
npm init
npm install --save serverless-python-requirements
To configure our serverless.yml
file to use the plugin, we'll add the following lines in our serverless.yml
:
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: non-linux
Implementation
Create virtual env local, activate and deactivate
#http://sourabhbajaj.com/mac-setup/Python/virtualenv.html
virtualenv venv
source venv/bin/activate
deactivate
Install python dependency for this function:
pip install boto3 google-api-python-client requests
Store a reference to my dependencies:
pip freeze > requirements.txt
Optional: Re-install the dependencies from the requirements.txt
:
pip install -r requirements.txt
Implement the function
Define the function in the
serverless.yml
including the events (e.g. http) that trigger the function and the handlerImplement the unit test: what is the best serverless unit test framework for python?
Implement the handler function in
handler.py
Test the function locally
sls invoke local --function create_api --path tests/create-api-event.json
sls invoke local -f hello
Run the unit tests
python -m unittest discover -s tests
Protect Endpoint with API Key
Examples
Deployment
Deploy a project
sls deploy

The deployment takes very long. I have to see how to optimize this.
Test the deployed function
You can use the endpoint endpoint and use Postman to make a "real world" request:
Or you can use the CLI and use:
sls invoke -f create_api --path tests/create-api.json

Deploy single function
sls deploy function --function hello
Sources:
Last updated