Skip to content

Latest commit

History

History
146 lines (116 loc) · 3.72 KB

File metadata and controls

146 lines (116 loc) · 3.72 KB

Python Serverless API

Boilerplate Flask app that is portable between different serverless platforms.


Platforms

Deployment and application code adaptors are being added for the following:


PlatformDeploymentStatus
AWS LambdaAWS SAM✔️
AWS LambdaTerraform✔️
Azure FunctionsTerraform
Google Cloud FunctionsTerraform
Google Kubernetes Enginegcloud & kubectl
PlatformAdaptorCode/Config
Local DevelopmentNone💾
AWS Lambda Python >= 3.6Flask-Lambda-Python36💾
AWS Lambda Python <= 3.6Flask-Lambda💾
Azure Functions
Google Cloud Functions

Setup

1. Create .env file and update contents

This is used to set the environment variables required for deployment and local development.

$ cp .env.example .env
$ vim .env

2. Create a virtualenv then install requirements:

$ make env
$ source env/bin/activate
$ make deps

Example Usage

1. Set Environment

Ensure you have created your virtualenv and have the necessary environment variables set (see setup instructions above).

$ source env/bin/activate
$ source .env

2. Run server

On host
$ make server-debug
In docker
$ docker-compose up

3. Manually test development server

$ http-prompt localhost:5000
GET /artists

AWS Lambda

Terraform Deployment

Ensure you have created your virtualenv and have the necessary environment variables set (see setup instructions above).

Setup

Create terraform state bucket.

$ aws s3 mb --region eu-west-2 s3://<bucket_name>

Update bucket name in /terraform/main.tf.

terraform {
backend "s3" {
bucket = "<bucket_name>"
key = "terraform.tfstate"
region = "eu-west-2"
}
}

Deploy

Bundle the app into a zip and deploy it using terraform.

$ ./bin/deploy

Manually Test API

$ http-prompt $(cd terraform && terraform output api_url)
GET artists

Unlike Terraform SAM doesn't upload the zip bundle so do this using the aws-cli tool.

$ aws s3 mb s3://<mybucket>
$ aws s3 cp terraform/dist/python-serverless-api.zip s3://<mybucket>/python-serverless-api.zip

Update the S3 bucket value in the SAM config.

# template.yamlAWSTemplateFormatVersion: '2010-09-09'Transform: 'AWS::Serverless-2016-10-31'Description: 'Boilerplate Python 3.6 Flask App.'Resources:
FlaskAPI:
Type: 'AWS::Serverless::Function'Properties:
CodeUri: s3://<mybucket>/flask-app.zip

Deploy the SAM template with Cloudformation.

$ aws cloudformation deploy \
--template-file template.yaml \
--stack-name python-serverless-stack-sam
--capabilities CAPABILITY_IAM

Test

$ make test
$ make lint