Skip to content

Overview

Setting up Serverless:

Within the PyDPS project is the "serverless" application. You can spin this up by running vagrant up serverless (see the Vagrantfile for specific details on this process).

This vagrant box will run the local playbook vagrant_serverles.yml. This will provision the box and run the mysql role which will install mysql and bring a copy of the attrib and attrib_client db down. It will install and configure awscli, and finally it will run the ansible role serverless and prepare the local directories for development.
Though installing the mysql is a little bit of overkill, it does provide the API development environment with an up to date copy of the tables etc..
Once this provision has finished, you will be presented with an output of text that will give you commands to run.

Note

When you try to run sls from command line initially you may hit one of these issues:

  • When you run sls from the command line, you might be asked to log into AWS dont do this.Check you've got the correct ~/.aws/credentials file.
  • Run serverless plugin install -n <plugin-name> for each plug in that has been defined in the plugin section of serverless/api/serverless.yml
  • The ansibles will set up the ~/.aws/config | ~/.aws/credentials files but if serverless has an issue with reading the profile run this

Local Development

To develop locally you will need to activate the pyenv and start adding tests. Its not impossible to create a python file and run that, but the lambdas are just python functions, so they should be testable during development using pytest.

Start the venv: source /srv/pydps/serverless/api/.venv/bin/activate
End the venv: deactivate

Run tests with pytest:

cd /srv/pydps/serverless/
pytest tests/file_name.py
Location of our Lambda functions:
  auth: /srv/pydps/serverless/api/auth
  segments: /srv/pydps/serverless/api/segments_get
  visscores: /srv/pydps/serverless/api/visscore_get

General Lambda advice

The entry point for each lambda is defined in serverless.yml in each functions handler property. This function much accept an event object, and a context object.

Click here to see the Cubed lambda functions on AWS.

Legacy

If the serverless-plugin-datadog npm package is installed however, the entry point will be changed to datadog_lambda.handler.handler this function will then act as a decorator for your handler that is now defined in the lambda environment vars under DD_LAMBDA_HANDLER