Serverless

April 2018

Global Azure Bootcamp

About Me

  • David Fekke
  • Chief Mobile Architect for Swyft Technology
  • Why is a Mobile developer giving an Azure presentation?
  • 20+ Years building Web Applications
  • .NET, Java, PHP, ColdFusion and Node.js
  • Commercial Pilot and Remote Pilot
  • Co-Organize JaxNode User Group
  • www.jaxnode.com

Servers

Australia Census Example 

  • Australia decided to go paperless in 2016
  • Load tested with millions of requests
  • 1000s of Aussies went to do their census online
  • Site was DDoS attacked
  • Down 40 hours
  • Census missed the deadline

Hosting Applications

  • Run locally
  • Deploy to Server (in a data center hopefully)
  • On Premise
  • Co-Location in rack space
  • Cloud Hosting (Rackspace, CenturyLink)
  • PAAS (AWS EC2, Azure, Bluemix)
  • Container hosting
  • Serverless (Lambda, Azure Functions)

Micro-Service apps

  • Composed of many services
  • Sometimes called micro-services
  • May have less than 200 lines of code
  • One function per service
  • Logging important!!!

Randrr's Cloud solution

  • AWS EC2
  • Deploying Docker and Kubernetes
  • Using Kafka and Cassandra for DBs
  • Microservices written in GO and Node.js
  • Node service was running in 50 MBs
  • Rewrote into GO, now 1 MB
  • No vendor lockin

Docker Issues

  • Still need to deploy VMs
  • VMs can be elastically deployed, but still need have some running all the time
  • Services running in Python or JavaScript become expensive
  • Services written in Java can have long warmup times

Lambda or Function apps

  • Don't need to manage infrastructure
  • Services can be written as simple functions
  • Deployed through Portal UI or through command line tools like the azure-cli
  • Available on Azure, AWS, IBM OpenWhisk and now Firebase functions

AWS Lambda

  • Written in JS, Java, Python, C# or Go
  • Bound to events or HTTP requests
  • 128 MB RAM Default per function
  • Monitor logging with CloudWatch

Azure Functions

  • Azure version of AWS Lambda
  • Similar model
  • NPM install modules through console
  • Use with Azure Logic Apps

Advantages of Serverless

  • Lowest Cost hosting
  • Simple development model
  • Simple deployment
  • Don't have to worry about load scheduling
  • Scales automagically

$0.20 per 1 million requests

Disadvantage of Serverless

  • Local development a challenge
  • No NPM Support (Azure has NPM)
  • Debugging threw logging

Executing Functions

  • Triggered off of events
  • HTTP endpoints
  • Schedule (cron)
  • fired on file uploads or queues

Ocean Disc example

 

  • Mobile app had to store reports
  • Upload to S3 storage
  • Process files based on upload event
  • Call REST based service
  • Accomplished threw AWS Lambda

We are going to need a bigger framework!

Serverless Framework

  • Formerly Called Jaws
  • Formerly AWS only
  • Build entire apps from Lambda/Functions
  • Organize functions
  • Local development and testing
  • resource management (APIs and Databases)
  • Multi-region development
  • Now on IBM OpenWhisk

Event Gateway

  • API Gateway
  • Cross cloud events
  • Platform agnostic
  • Extend through middleware

method signature

module.exports.hello = (context, data) => {
  const response = {
      message: 'Hello World!',
      input: data.paramName,
  };

  context.done(response);
};
module.exports.hello = (event, context, callback) => {
  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Hello World!',
      input: event,
    }),
  };

  callback(null, response);
};

AWS Lambda method

Azure Environment Vars

# export Azure serverless keys
export azureSubId='########-####-####-####-46ac114fbfc4'
export azureServicePrincipalTenantId='########-####-####-####-bedeee9b4cf3'
export azureServicePrincipalClientId='http://azure-cli-2018-04-21-17-33-32'
export azureServicePrincipalPassword='########-####-####-####-79f2e198745f'

Install Serverless

  • Install Node.js
  • $ npm i -g serverless
  • Verify
  • $ sls -v

Serverless CLI

  • $ sls create -t azure-nodejs --path <path-to-app>
  • $ sls deploy
  • $ sls deploy --function functionName
  • $ sls invoke --function functionName
  • $ sls logs -f hello

Demo

Questions?

Resources

ServerlessAWS&Azure2.0

By David Fekke

ServerlessAWS&Azure2.0

These are the slides for the April 2017 Serverless presentation at Cloud Computing User Group

  • 1,262