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 -gIn your repo create your serverless template for Python
mkdir notes-app-api
cd notes-app-api
sls create --template aws-python3Compile 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-requirementsTo 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-linuxImplementation
Create virtual env local, activate and deactivate
#http://sourabhbajaj.com/mac-setup/Python/virtualenv.html
virtualenv venv
source venv/bin/activate
deactivateInstall python dependency for this function:
pip install boto3 google-api-python-client requestsStore a reference to my dependencies:
pip freeze > requirements.txtOptional: Re-install the dependencies from the requirements.txt:
pip install -r requirements.txtImplement the function
Define the function in the
serverless.ymlincluding 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.pyTest the function locally
sls invoke local --function create_api --path tests/create-api-event.json
sls invoke local -f helloRun the unit tests
python -m unittest discover -s testsProtect 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 helloSources:
Last updated