Serverless Development
... featuring Microsoft Azure

About Me










1st Career


About Me
2nd Career
























About our group

Vendor Neutral





1st Tuesday of the month
(except January 2019: is 2nd Tuesday)
5:30pm - 8:30pm
Richmond Heights Community Center
"Dale" Room
Free and open to the public!

https://www.meetup.com/stl-serverless/events/254589340/
-
December 4th
-
Serverless Monitoring, Testing & Security
-
Featuring Google Cloud
-

Coming in 2019
-
Serverless frameworks
-
Special guest speakers
-
Hands-on workshops
-
and...

Starting in January 2019,
we'll meet at Daughtery Offices

Help Wanted!


Looking for a Backup Co-organizer


Avram Peters
Daughtery Business Solutions
Speakers Wanted


Meeting Sponsors Wanted


Tell about your company while we enjoy your refreshments
Daughtery Business Solutions
Other Help Wanted


Overview
- A very brief review of serverless
- Introduction to serverless on Azure
- Development setup
- Project setup
- Automating builds & deployment
- Lab
First, a very brief review...
What is serverless?
Let's start with what it isn't

Serverless does not mean, "No servers"
Serverless computing is the abstraction of servers, infrastructure, and operating systems. When you build serverless apps you don’t need to provision and manage any servers, so you can take your mind off infrastructure concerns. Serverless computing is driven by the reaction to events and triggers happening in near-real-time—in the cloud. As a fully managed service, server management and capacity planning are invisible to the developer and billing is based just on resources consumed or the actual time your code is running.
Microsoft Azure:

https://azure.microsoft.com/en-us/overview/serverless-computing/
Serverless lets you think about servers less.
In summary...

Serverless Providers





Many others
Gartner's 2018 IaaS Magic Quadrant

https://www.bmc.com/blogs/gartner-magic-quadrant-cloud-iaas/
Path to Serverless

Path to Serverless
Bare Metal
Virtual Machines
IaaS
PaaS
CaaS
FaaS





Value Line
Serverless includes...


Storage
Queues
Notifications
API Gateways

Functions

Monitoring & Logging


and much, much more...

Serverless Runtimes
Advantages of Serverless
- Development simplicity
- Zero provisioning or management
- Scale up based on events
- Scale to zero
- Highly available
- Usage-based billing
Scale up based on events


[ { "item": 1} ]

Item(1)
Scale up based on events


[ { "item": 1},
...
{"item" : 3} ]

Item(1)

Item(2)

Item(3)
Scale to Zero
- Zero or few customers
- New Project
- Startup
- Development 7am - 7pm
- Periodic loads
- Evening batch runs
- Occasional, sporadic loads
- "Forgot password"
- CI Build
- Testing
Highly Available

Usage-based Billing
- Zero or few customers
- No charge until customers start using it
- High loads 7am - 7pm
- No charge after 7pm
- Periodic loads
- No charge until batch job runs
- Occasional, sporadic loads
- No charge until load appears
Disadvantages of Serverless
- Development complexity
- Testing complexity
- Deployment complexity
- Cold start performance
These topics and more will form the basis for future talks
Serverless Architectural Patterns
- Request-Response
- Event-Driven
Request-Response
request
trigger
return
response
Http Trigger
Azure Function

f
Event-Driven
event
trigger

Function

Add 1080p video to
storage

Transcode
to 720p
Save to 720p storage
event
trigger


notification hub

Serverless on Microsoft Azure
- Overview of Azure Services
- Azure Functions
There are many Azure Services

A few key services you might use in a serverless app
- Resource groups (billing and deployment)
- API Management (defining APIs)
- Function Apps (compute)
- Logic Apps (visual workflow)
- Cosmos DB (multi-model database)
- Cloud storage (file storage)
- Event Grid (event routing service)
- Azure Active Directory (identity)
- Application Insights (monitoring)
- More...
Azure Functions
- Getting started
- Demo
Azure Functions Getting Started
- Add Resource Group
- Create Function App
- Create Function
- Test Function
- Demo
Add Resource Group

What's a Resource Group?
resource group - A container that holds related resources for an Azure solution. The resource group can include all the resources for the solution, or only those resources that you want to manage as a group. You decide how you want to allocate resources to resource groups based on what makes the most sense for your organization.
Example Resource Group
Microservice
Function 1
Function 3
Function 4
Function 5
Storage
Queues
Function 2
Function App
Create Function App

Create Function App

Configure Function App

Add Function

Add Function

The Generated Function

RandomNumber Function
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
context.log.info({'req.query': req.query})
context.log.info({'req.body': req.body})
const min = req.query.min || (req.body && req.body.min) ? parseInt((req.query.min || req.body.min)) : 1
const max = req.query.max || (req.body && req.body.max) ? parseInt((req.query.max || req.body.max)) : 100
const randomVal = Math.floor(Math.random() * (max - min + 1) + min)
const result = {
min: min,
max: max,
randomVal: randomVal
}
context.res = {
status: 200, // Defaults to 200, but included here for illustration
body: result
}
}
POST Test

GET Test

Postman Testing

First, click "Get Function URL" to copy URL
Postman GET Test

Postman POST Test

Development setup
- Command Line Interface
- Azure CLI
- Azure Core Tools version 2.x
- .NET Core
- IDE Setup
Azure CLI setup
- http://bit.ly/install_azure_cli

Install on Windows

Install on Mac

Install Core Tools


Install .NET Core

CLI Examples
# list versions
az --version
# login
az login # this opens a browser
az login -u <username> -p <password>
# Add a resource group
# https://docs.microsoft.com/en-us/azure/azure-resource-manager/cli-azure-resource-manager
az group create --name MyResourceGroup --location "South Central US"
Creating a function using CLI
https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-first-azure-function-azure-cli

IDE Setup
- VS Code
- By far the most feature rich
- Great integration for creating, packaging and deploying Azure Functions
- JetBrains IDEA - Azure Toolkit for IntelliJ
- Minimal
- Not useful for Azure Functions
- Eclipse - Azure Toolkit for Eclipse
- I didn't test this
VS Code Demo
Project setup
- Using VS Code it's very easy
- Use CLI to bootstrap function app
- Create manually, perhaps based on Gradle or Maven plugin
Automating builds & Deployments
- Jenkins
- Gradle
- Maven
Azure Functions
Gradle Plugin Demo
Summary
- Microsoft Azure is a very good competitor to AWS
- However, it's a bit behind AWS, though catching up
- Tooling is still very weak, except VS Code is excellent
- Definitely worth a look if you're wanting to do serverless
Resources
- https://azure.microsoft.com
- https://azure.microsoft.com/en-us/overview/serverless-computing/
- https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-first-azure-function-azure-cli
- Me
- jackfrosch@stlserverless.com
- LinkedIn: in/jackfrosch
- Twitter @jackfrosch
Next Meeting:
Monitoring, Security, & Testing serverless
featuring Google Cloud Platform
Questions?

Lab
Serverless Development featuring Azure
By Jack Frosch
Serverless Development featuring Azure
- 1,803