5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 1/80
USE CASES FOR SERVERLESSUSE CASES FOR SERVERLESS
TECHNOLOGIESTECHNOLOGIES
1
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 2/80
NICE TO MEET YOUNICE TO MEET YOU
Ruslan TolstovRuslan Tolstov
Ruby Developer at MLSDevRuby Developer at MLSDev
https://bit.ly/2Ul3L33
2
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 3/80
AGENDAAGENDA
What is serverless?
How serverless works?
Providers
AWS Lambda
AWS API Gateway
Serverless Frameworks
Cons
Prices
Use cases
3
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 4/80
WHAT IS SERVERLESS?WHAT IS SERVERLESS?
Serverless architecture replaces long-running virtual machines with ephemeral computeServerless architecture replaces long-running virtual machines with ephemeral compute
power that comes into existence on request and disappears immediately after usepower that comes into existence on request and disappears immediately after use
4
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 5/80
TRADITIONAL ARCHITECTURETRADITIONAL ARCHITECTURE
5
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 6/80
TRADITIONAL ARCHITECTURETRADITIONAL ARCHITECTURE
Set up server
5
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 7/80
TRADITIONAL ARCHITECTURETRADITIONAL ARCHITECTURE
Set up server
OS
5
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 8/80
TRADITIONAL ARCHITECTURETRADITIONAL ARCHITECTURE
Set up server
OS
DB
5
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 9/80
TRADITIONAL ARCHITECTURETRADITIONAL ARCHITECTURE
Set up server
OS
DB
Hardware updates
5
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 10/80
TRADITIONAL ARCHITECTURETRADITIONAL ARCHITECTURE
Set up server
OS
DB
Hardware updates
Soft updates
5
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 11/80
TRADITIONAL ARCHITECTURETRADITIONAL ARCHITECTURE
Set up server
OS
DB
Hardware updates
Soft updates
Scaling
5
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 12/80
TRADITIONAL ARCHITECTURETRADITIONAL ARCHITECTURE
Set up server
OS
DB
Hardware updates
Soft updates
Scaling
5
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 13/80
MICROSERVICE ARCHITECTUREMICROSERVICE ARCHITECTURE
6
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 14/80
MICROSERVICE ARCHITECTUREMICROSERVICE ARCHITECTURE
We need DevOps
6
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 15/80
SERVERLESS ARCHITECTURESERVERLESS ARCHITECTURE
Function-as-a-Service(FaaS)Function-as-a-Service(FaaS)
7
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 16/80
SERVERLESS ARCHITECTURESERVERLESS ARCHITECTURE
Function-as-a-Service(FaaS)Function-as-a-Service(FaaS)
7
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 17/80
FUNCTION AS A SERVICE (FAAS)FUNCTION AS A SERVICE (FAAS)
8
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 18/80
FUNCTION AS A SERVICE (FAAS)FUNCTION AS A SERVICE (FAAS)
Function as the unit of deployment and
scaling
8
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 19/80
FUNCTION AS A SERVICE (FAAS)FUNCTION AS A SERVICE (FAAS)
Function as the unit of deployment and
scaling
Metrics
8
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 20/80
FUNCTION AS A SERVICE (FAAS)FUNCTION AS A SERVICE (FAAS)
Function as the unit of deployment and
scaling
Metrics
No machines, VMs, or containers
8
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 21/80
FUNCTION AS A SERVICE (FAAS)FUNCTION AS A SERVICE (FAAS)
Function as the unit of deployment and
scaling
Metrics
No machines, VMs, or containers
Stateless
8
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 22/80
FUNCTION AS A SERVICE (FAAS)FUNCTION AS A SERVICE (FAAS)
Function as the unit of deployment and
scaling
Metrics
No machines, VMs, or containers
Stateless
Never pay for idle
8
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 23/80
SERVERLESS EVOLUTIONSERVERLESS EVOLUTION
9
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 24/80
HOW SERVERLESS WORKS?HOW SERVERLESS WORKS?
Functions are stateless
10
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 25/80
VENDORSVENDORS
11
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 26/80
GCP SUPPORTED LANGUAGESGCP SUPPORTED LANGUAGES
12
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 27/80
AWS SUPPORTED LANGUAGESAWS SUPPORTED LANGUAGES
13
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 28/80
AWS SUPPORTED LANGUAGESAWS SUPPORTED LANGUAGES
13
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 29/80
AWS SUPPORTED LANGUAGESAWS SUPPORTED LANGUAGES
13
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 30/80
AWS SUPPORTED LANGUAGESAWS SUPPORTED LANGUAGES
13
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 31/80
MS AZURE SUPPORTED LANGUAGESMS AZURE SUPPORTED LANGUAGES
14
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 32/80
MS AZURE SUPPORTED LANGUAGESMS AZURE SUPPORTED LANGUAGES
14
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 33/80
MS AZURE SUPPORTED LANGUAGESMS AZURE SUPPORTED LANGUAGES
14
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 34/80
MS AZURE SUPPORTED LANGUAGESMS AZURE SUPPORTED LANGUAGES
14
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 35/80
MS AZURE SUPPORTED LANGUAGESMS AZURE SUPPORTED LANGUAGES
14
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 36/80
MS AZURE SUPPORTED LANGUAGESMS AZURE SUPPORTED LANGUAGES
14
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 37/80
REST API EXAMPLEREST API EXAMPLE
15
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 38/80
AMAZON API GATEWAYAMAZON API GATEWAY
Amazon API Gateway is a fully managed service that makes it easy for developers toAmazon API Gateway is a fully managed service that makes it easy for developers to
create, publish, maintain, monitor, and secure APIs at any scale.create, publish, maintain, monitor, and secure APIs at any scale.
16
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 39/80
AMAZON API GATEWAYAMAZON API GATEWAY
Easy API Creation and Deployment
Support for HTTP/REST APIs and WebSocket APIs
Resiliency
API Lifecycle Management
Monitoring
Import from swagger/postman
17
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 40/80
ONLINE EDITOR API GATEWAYONLINE EDITOR API GATEWAY
18
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 41/80
AWS LAMBDA FUNCTIONAWS LAMBDA FUNCTION
AWS Lambda is a compute service that lets
you run code without procisioning or
managing servers
AWS Lambda executes your code only when
needed and scales automatically, from a few
requests per day to thousands per second
Lambda functions can be used to join
thogether many di erent AWS services
AWS Services can trigger Lambda functions
19
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 42/80
ANATOMY OF LAMBDA FUNCTION (RUBY)ANATOMY OF LAMBDA FUNCTION (RUBY)
def handler(event:, context:)
#some logic
{ status: 200, body: {} }
end
ruby2.5
20
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 43/80
ANATOMY OF LAMBDA FUNCTION (NODEJS)ANATOMY OF LAMBDA FUNCTION (NODEJS)
exports.handler = function(event, context, callback) {
//some logic
callback(null, { status: 200, body: {} })
}
nodejs6.10
exports.handler = async (event, context) => {
//some logic
return { status: 200, body: {} }
}
nodejs8.10
21
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 44/80
ONLINE EDITOR LAMBDAONLINE EDITOR LAMBDA
22
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 45/80
AWS CLI + ZIPAWS CLI + ZIP
cd lambda
zip –X –r ../index.zip *
aws lambda update-function-code --function-name
MyLambdaFunction --zip-file fileb://index.zip
23
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 46/80
AWS CLI + CLOUDFORMATION OR SAMAWS CLI + CLOUDFORMATION OR SAM
24
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 47/80
SERVERLESS FRAMEWORKSSERVERLESS FRAMEWORKS
25
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 48/80
SERVERLESS FRAMEWORKSERVERLESS FRAMEWORK
26
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 49/80
SERVERLESS FRAMEWORKSERVERLESS FRAMEWORK
Cross vendor support
26
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 50/80
SERVERLESS FRAMEWORKSERVERLESS FRAMEWORK
Cross vendor support
Dozens of plugins
26
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 51/80
SERVERLESS FRAMEWORKSERVERLESS FRAMEWORK
Cross vendor support
Dozens of plugins
YAML
26
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 52/80
SERVERLESS FRAMEWORKSERVERLESS FRAMEWORK
Cross vendor support
Dozens of plugins
YAML
Invoke function localy
26
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 53/80
SERVERLESS FRAMEWORKSERVERLESS FRAMEWORK
Cross vendor support
Dozens of plugins
YAML
Invoke function localy
MIT License
26
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 54/80
SERVERLESS CONFIGSERVERLESS CONFIG
service: serverless-thumbnail
runtime: ruby2.5
provider:
name: aws
timeout: 30
memorySize: 128
role: ${env:AWS_ROLE}
deploymentBucket:
name: ${env:DEPLOYMENT_BUCKET}
iamRoleStatements:
- Effect: Allow
Action:
- s3:putObject
Resource: '*'
functions:
thumbnail:
events:
- http: get thumbnail
handler: handler.thumbnail
resources:
Resources:
NewResource:
Type: AWS::S3::Bucket
27
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 55/80
DEPLOYDEPLOY
serverless deploy
28
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 56/80
SERVERLESS CLISERVERLESS CLI
serverless deploy -f sendEmail
serverless invoke local --function sendEmail
serverless logs -f sendEmail
29
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 57/80
SERVERLESS PLUGINSSERVERLESS PLUGINS
serverless-plugin-existing-s3
serverless-dotenv-plugin
serverless-secrets-plugin
serverless-o ine
serverless-dynamodb-local
30
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 58/80
PERMISSIONSPERMISSIONS
31
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 59/80
INVOCATION TYPESINVOCATION TYPES
Synchronous
Asynchronous
32
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 60/80
RETRY BEHAVIOURRETRY BEHAVIOUR
DLQ - Dead Letter Queue
33
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 61/80
BINARIESBINARIES
Your libraries must be for the Linux x64 platform/architecture.Your libraries must be for the Linux x64 platform/architecture.
npm --arch=x64 --platform=linux
or deploy with CI, docker container
34
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 62/80
STEP FUNCTIONSSTEP FUNCTIONS
35
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 63/80
CONSCONS
36
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 64/80
STATELESSSTATELESS
37
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 65/80
COLDSTART TIMECOLDSTART TIME
38
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 66/80
LAMBDA LIMITSLAMBDA LIMITS
/tmp directory storage - 512 MB
Function timeout - 900 seconds (15 minutes)
Body payload size - sync 6MB, async 128KB
Function memory allocation - 128 MB to
3008 MB
Deployment package size - 50 MB (zipped),
250 MB (unzipped)
Concurrent executions - 1000 (per account)
39
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 67/80
40
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 68/80
LAMBDA SCALINGLAMBDA SCALING
1000+1000+
41
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 69/80
VENDOR LOCKVENDOR LOCK
42
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 70/80
OPENFAASOPENFAAS
OpenFaaS® (Functions as a Service) is a framework for building Serverless functions withOpenFaaS® (Functions as a Service) is a framework for building Serverless functions with
Docker and Kubernetes which has rst-class support for metrics. Any process can beDocker and Kubernetes which has rst-class support for metrics. Any process can be
packaged as a function enabling you to consume a range of web events without repetitivepackaged as a function enabling you to consume a range of web events without repetitive
boiler-plate coding.boiler-plate coding.
43
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 71/80
PRICESPRICES
44
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 72/80
FREE TIERFREE TIER
Compute Time = Invocations × Duration × RAM / 1024
45
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 73/80
PRICESPRICES
46
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 74/80
LOW COMPUTE USE CASELOW COMPUTE USE CASE
47
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 75/80
HIGH COMPUTE USE CASEHIGH COMPUTE USE CASE
48
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 76/80
3RD PARTY TOOLS3RD PARTY TOOLS
Epsagon
Thundra
Dashbird
Sentry
Rollbar
49
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 77/80
USE CASESUSE CASES
Web appliactions
IoT
Media Transformation (audio/video/image)
Multi-Location Media Transformation with Lambda@Edge and CloudFront
Mass Emailing
Real-time Data Transformation
CRON Jobs with CloudWatch
Chatbot
Websockets
50
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 78/80
CONCLUSIONSCONCLUSIONS
Keep the Lambda handler lean
Avoid hardcoding, use enviroment variables
One function, One task
Watch the deployment package size, remove unused dependencies
Make use of error handling mechanisme, DLQs
Keep containers warm
Use frameworks
51
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 79/80
THANKS!THANKS!
52
5/7/2019 MLSDev
localhost:8000/?print-pdfi#/ 80/80
MLSDev
QUESTIONSQUESTIONS
53

Use cases for Serverless Technologies - Ruslan Tolstov (RUS) | Ruby Meditation 27