Skip to content

Latest commit

 

History

History
27 lines (17 loc) · 2.05 KB

README.md

File metadata and controls

27 lines (17 loc) · 2.05 KB

serverless-multicloud-example

This is the example for my blog post - Blog Post

An example Node Express app that can be deployed in any of the major clouds by the Serverless framework (https://serverless.com). The differences in handler for each serverless service is abstracted by the serverless-express plugin (https://www.npmjs.com/package/serverless-express) - which has been isolated in handler.js - leaving app.js for our cloud-agnostic business logic.

I intend for it to be a working example of the serverless without lock-in concepts discussed here - https://www.thoughtworks.com/insights/blog/mitigating-serverless-lock-fears

To use copy the relevant severless-xxx.yml file for the cloud you want (AWS, GCP or Azure) to serverless.yml and do a sls deploy.

You also need to provide an Internet-facing Mongo URL via environment variable in the serverless-xxx.yml file to use the Mongo CRUD functionality (all the /document APIs).

Note that for GCP some initial setup is required as described here - https://serverless.com/framework/docs/providers/google/guide/credentials/. The other clouds you just need valid login details and CLIs configured to proceed.

Note that for Azure the URIs have to start with /api/app and in Google they have to start with /handler. I am investigating how to have them start at the root like in AWS.

For the AWS side you can use the offline testing functionality by doing a sls offline.

The example app is a todo list application with a description and due date field for each task.

The APIs are:
GET - / - App description and version
POST - /documents/new - Create a task/document (takes two parameters - description and duedate)
GET - /documents/all - Return all tasks/documents
GET - /documents/id - Return a particular document by ID (via id parameter)
DELETE - /documents/id - Delete a particular document by ID (via id parameter)
PATCH - /documents/id - Update a particular document by ID (via id parameter and it takes description and/or duedate as the fields to update)