SlideShare a Scribd company logo
Going
Serverless
@jagthedrummer - OctoLabs.com/railsconf2016
!
!
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless?
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless
@jagthedrummer - OctoLabs.com/railsconf2016
@jagthedrummer - OctoLabs.com/railsconf2016
⚡ serverless.com ⚡
framework for building
web, mobile and IoT applications exclusively on
AWS Lambda, API Gateway, and related services
@jagthedrummer - OctoLabs.com/railsconf2016
!
!
@jagthedrummer - OctoLabs.com/railsconf2016
Vendor Lock-in !
@jagthedrummer - OctoLabs.com/railsconf2016
OPS
@jagthedrummer - OctoLabs.com/railsconf2016
Scale
@jagthedrummer - OctoLabs.com/railsconf2016
Money
@jagthedrummer - OctoLabs.com/railsconf2016
Jeremy Green
Consultant, Author, SaaSer
@jagthedrummer
jeremy@octolabs.com
@jagthedrummer - OctoLabs.com/railsconf2016
IndependentConsultingManual.com
Remarq.io
Other Interests:
Drumming, Photography, and Brewing
@jagthedrummer - OctoLabs.com/railsconf2016
clickfunnels.com
@jagthedrummer - OctoLabs.com/railsconf2016
@jagthedrummer - OctoLabs.com/railsconf2016
The Pieces
@jagthedrummer - OctoLabs.com/railsconf2016
Lambda
@jagthedrummer - OctoLabs.com/railsconf2016
API Gateway
@jagthedrummer - OctoLabs.com/railsconf2016
DynamoDB
@jagthedrummer - OctoLabs.com/railsconf2016
RDS
@jagthedrummer - OctoLabs.com/railsconf2016
CloudFormation
@jagthedrummer - OctoLabs.com/railsconf2016
Putting it all together
@jagthedrummer - OctoLabs.com/railsconf2016
@jagthedrummer - OctoLabs.com/railsconf2016
@jagthedrummer - OctoLabs.com/railsconf2016
@jagthedrummer - OctoLabs.com/railsconf2016
@jagthedrummer - OctoLabs.com/railsconf2016
Coding in the
browser?
@jagthedrummer - OctoLabs.com/railsconf2016
! → " → #
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless to the rescue
serverless.com
Manage Lambda, API Gateway and CloudFormation
via code and CLI instead of via GUI.
docs.serverless.com
@jagthedrummer - OctoLabs.com/railsconf2016
Getting
started
@jagthedrummer - OctoLabs.com/railsconf2016
First step
→ Create a new AWS account!
→ Srsly!
@jagthedrummer - OctoLabs.com/railsconf2016
$ npm install -g serverless
@jagthedrummer - OctoLabs.com/railsconf2016
$ sls project create
@jagthedrummer - OctoLabs.com/railsconf2016
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| ___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v0.5.5
`-------'
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless: Initializing Serverless Project...
Serverless: Enter a name for this project: (serverless-bkqhpg) going-serverless-demo
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless: Enter a new stage name for this project: (dev)
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless: For the "dev" stage, do you want to use an existing Amazon Web Services
profile or create a new one?
> Existing Profile
Create A New Profile
Serverless: Select a profile for your project:
> lambdatest
Serverless: Creating stage "dev"...
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless: Select a new region for your stage:
> us-east-1
us-west-2
eu-west-1
eu-central-1
ap-northeast-1
Serverless: Creating region "us-east-1" in stage "dev"...
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless: Deploying resources to stage "dev" in region "us-east-1" via Cloudformation
(~3 minutes)...
Serverless: Successfully deployed "dev" resources to "us-east-1"
Serverless: Successfully created region "us-east-1" within stage "dev"
Serverless: Successfully created stage "dev"
Serverless: Successfully initialized project "going-serverless-demo"
@jagthedrummer - OctoLabs.com/railsconf2016
$ cd going-serverless-demo
$ tree
.
├── admin.env # AWS Profiles - gitignored
├── package.json # npm package file
├── s-project.json # project and author data
├── s-resources-cf.json # CloudFormation template
└── _meta # meta data for stage/regions config and variables - gitignored
   ├── resources
   │   └── s-resources-cf-dev-useast1.json
   └── variables
   ├── s-variables-common.json
   ├── s-variables-dev-useast1.json
   └── s-variables-dev.json
3 directories, 8 files
@jagthedrummer - OctoLabs.com/railsconf2016
What should
we build?
@jagthedrummer - OctoLabs.com/railsconf2016
Let's build
something real*
@jagthedrummer - OctoLabs.com/railsconf2016
LPaaSleft-pad as a service*
* OK, "real" !
@jagthedrummer - OctoLabs.com/railsconf2016
$ sls function create left-pad
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless: Please, select a runtime for this new Function
> nodejs4.3
python2.7
nodejs (v0.10, soon to be deprecated)
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless: For this new Function, would you like to create an
Endpoint, Event, or just the Function?
> Create Endpoint
Create Event
Just the Function...
Serverless: Successfully created function: "left-pad"
@jagthedrummer - OctoLabs.com/railsconf2016
$ tree left-pad/
left-pad/
├── event.json # sample event for testing function locally
├── handler.js # function handler
└── s-function.json # data for your lambda function, endpoints and event sources
0 directories, 3 files
@jagthedrummer - OctoLabs.com/railsconf2016
! it!
@jagthedrummer - OctoLabs.com/railsconf2016
$ sls dash deploy
@jagthedrummer - OctoLabs.com/railsconf2016
$ sls dash deploy
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| ___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v0.5.5
`-------'
Serverless: Select the assets you wish to deploy:
left-pad
* function - left-pad
* endpoint - left-pad - GET
- - - - -
> Deploy
Cancel
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless: Deploying the specified functions in "dev" to the following regions: us-east-1
Serverless: ------------------------
Serverless: Successfully deployed the following functions in "dev" to the following regions:
Serverless: us-east-1 ------------------------
Serverless: left-pad (going-serverless-demo-left-pad):
arn:aws:lambda:us-east-1:852612687751:function:going-serverless-demo-left-pad:dev
Serverless: Deploying endpoints in "dev" to the following regions: us-east-1
Serverless: Successfully deployed endpoints in "dev" to the following regions:
Serverless: us-east-1 ------------------------
Serverless: GET - left-pad -
http://serverless.octolabs.com/left-pad
@jagthedrummer - OctoLabs.com/railsconf2016
@jagthedrummer - OctoLabs.com/railsconf2016
Anatomy of a
Lambda
Function
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/handler.js
'use strict';
module.exports.handler = function(event, context, cb) {
return cb(null, {
message: 'Go Serverless! Your Lambda function executed successfully!'
});
};
@jagthedrummer - OctoLabs.com/railsconf2016
event
used to pass data to the function
{
string: 'test',
padding: 10
}
@jagthedrummer - OctoLabs.com/railsconf2016
context
provides runtime information
{
getRemainingTimeInMillis: function(){},
functionName: 'handler',
functionVersion: 'xyz',
awsRequestId: '12345',
identity: {...},
clientContext: {...}
}
@jagthedrummer - OctoLabs.com/railsconf2016
callback
used to return data or an error
// signature
callback(error,data);
// call with error
callback("some error message");
//or call with data
callback(null, someData);
@jagthedrummer - OctoLabs.com/railsconf2016
$ cd left-pad
$ npm init
...
$ npm install left-pad --save
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/handler.js
let leftpad = require('left-pad');
module.exports.handler = function(event, context, cb) {
};
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/handler.js
let leftpad = require('left-pad');
module.exports.handler = function(event, context, cb) {
var string = event.string || "",
padding = event.padding || 0,
};
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/handler.js
let leftpad = require('left-pad');
module.exports.handler = function(event, context, cb) {
var string = event.string || "",
padding = event.padding || 0,
paddedString = leftpad(string,padding),
payload = { paddedString };
};
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/handler.js
let leftpad = require('left-pad');
module.exports.handler = function(event, context, cb) {
var string = event.string || "",
padding = event.padding || 0,
paddedString = leftpad(string,padding),
payload = { paddedString };
return cb(null, payload);
};
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/s-function.json (simplified)
{
"runtime": "nodejs4.3",
"handler": "handler.handler",
"memorySize": 1024
"endpoints": [
]
}
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/s-function.json (simplified)
{
"runtime": "nodejs4.3",
"handler": "handler.handler",
"memorySize": 1024
"endpoints": [
{
"path": "left-pad",
"method": "GET",
"requestTemplates": {
"application/json": {
}
}
}
]
}
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/s-function.json (simplified)
{
"runtime": "nodejs4.3",
"handler": "handler.handler",
"memorySize": 1024
"endpoints": [
{
"path": "left-pad",
"method": "GET",
"requestTemplates": {
"application/json": {
"string": "$input.params('string')",
"padding": "$input.params('padding')"
}
}
}
]
}
@jagthedrummer - OctoLabs.com/railsconf2016
$ sls dash deploy
...
Serverless: GET - left-pad -
http://serverless.octolabs.com/left-pad
@jagthedrummer - OctoLabs.com/railsconf2016
http://serverless.octolabs.com/left-pad?
string=test&padding=10
{
"paddedString":" test"
}
@jagthedrummer - OctoLabs.com/railsconf2016
Testing
$ npm install -g mocha
$ npm install --save-dev chai
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/handler_test.js
var expect = require("chai").expect;
var handler = require("./handler.js");
describe('handler', function(){
it('returns the right thing', function(){
});
});
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/handler_test.js
var expect = require("chai").expect;
var handler = require("./handler.js");
describe('handler', function(){
it('returns the right thing', function(){
var event = {
string: 'test',
padding: 10
};
});
});
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/handler_test.js
var expect = require("chai").expect;
var handler = require("./handler.js");
describe('handler', function(){
it('returns the right thing', function(){
var event = {
string: 'test',
padding: 10
};
var context = {};
});
});
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/handler_test.js
var expect = require("chai").expect;
var handler = require("./handler.js");
describe('handler', function(){
it('returns the right thing', function(){
var event = {
string: 'test',
padding: 10
};
var context = {};
var cb = function(error, response){
expect(error).to.be.null;
expect(response.paddedString).to.equal(" test");
};
});
});
@jagthedrummer - OctoLabs.com/railsconf2016
left-pad/handler_test.js
var expect = require("chai").expect;
var handler = require("./handler.js");
describe('handler', function(){
it('returns the right thing', function(){
var event = {
string: 'test',
padding: 10
};
var context = {};
var cb = function(error, response){
expect(error).to.be.null;
expect(response.paddedString).to.equal(" test");
};
handler.handler(event, context, cb);
});
});
@jagthedrummer - OctoLabs.com/railsconf2016
$ mocha handler_test.js
handler
✓ returns the right thing
1 passing (9ms)
@jagthedrummer - OctoLabs.com/railsconf2016
What about
Ruby?@jagthedrummer - OctoLabs.com/railsconf2016
mruby-hello-world$ tree .
.
├── event.json
├── handler.js
├── handler.rb # A ruby script! :D
├── mruby # The mruby executable
└── s-function.json
0 directories, 5 files
@jagthedrummer - OctoLabs.com/railsconf2016
mruby-hello-world/handler.js
var spawn = require('child_process').spawn;
module.exports.handler = function(event, context, callback) {
var child = spawn('./mruby', ['handler.rb', JSON.stringify(event, null, 2)]);
}
@jagthedrummer - OctoLabs.com/railsconf2016
mruby-hello-world/handler.js
var spawn = require('child_process').spawn;
module.exports.handler = function(event, context, callback) {
var child = spawn('./mruby', ['handler.rb', JSON.stringify(event, null, 2)]);
var rubyOutput = [];
child.stdout.on('data', function (data) { rubyOutput.push(data.toString()); });
child.stderr.on('data', function (data) { rubyOutput.push(data.toString()); });
}
@jagthedrummer - OctoLabs.com/railsconf2016
mruby-hello-world/handler.js
var spawn = require('child_process').spawn;
module.exports.handler = function(event, context, callback) {
var child = spawn('./mruby', ['handler.rb', JSON.stringify(event, null, 2)]);
var rubyOutput = [];
child.stdout.on('data', function (data) { rubyOutput.push(data.toString()); });
child.stderr.on('data', function (data) { rubyOutput.push(data.toString()); });
child.on('close', function (code) {
callback(null,{
message: "We're back from ruby land",
rubyOutput: rubyOutput
});
});
}
@jagthedrummer - OctoLabs.com/railsconf2016
mruby-hello-world/handler.rb
puts 'Hello, Lambda from Ruby!'
puts ARGV
@jagthedrummer - OctoLabs.com/railsconf2016
http://serverless.octolabs.com/mruby-hello-world
{
"message":"We're back from ruby land",
"rubyOutput":["Hello, Lambda from Ruby!n["{}"]n"]
}
@jagthedrummer - OctoLabs.com/railsconf2016
This is not
production
ready!
@jagthedrummer - OctoLabs.com/railsconf2016
How fast is all
of this?
@jagthedrummer - OctoLabs.com/railsconf2016
API Gateway Latency
@jagthedrummer - OctoLabs.com/railsconf2016
Remote API call timing comparison
@jagthedrummer - OctoLabs.com/railsconf2016
Lambda timing comparison
@jagthedrummer - OctoLabs.com/railsconf2016
Wrapping Up
@jagthedrummer - OctoLabs.com/railsconf2016
AWS Provides the
Building Blocks
@jagthedrummer - OctoLabs.com/railsconf2016
Serverless Provides
Structure and Process
@jagthedrummer - OctoLabs.com/railsconf2016
You provide the
@jagthedrummer - OctoLabs.com/railsconf2016
Thank you!
(And thanks to Click Funnels)
octolabs.com/railsconf2016
@jagthedrummer - OctoLabs.com/railsconf2016
Bonus Slides
@jagthedrummer - OctoLabs.com/railsconf2016
Lambda Pricing !
Charged by:
→ # of requests
→ length of execution
@jagthedrummer - OctoLabs.com/railsconf2016
Lambda Request Pricing
First 1 million requests per month are free
$0.20 per 1 million requests thereafter
($0.0000002 per request)
@jagthedrummer - OctoLabs.com/railsconf2016
Lambda Execution Pricing
First 400,000 GB-seconds per month are free
$0.00001667 for per GB-second thereafter
@jagthedrummer - OctoLabs.com/railsconf2016
GB-second
=
LambdaMemoryInGigabytes * ExecutionTime
1GB * 1sec = 1 GB-sec
0.5GB * 2sec = 1 GB-sec
0.5GB * 0.5sec * 4executions = 1 GB-sec
@jagthedrummer - OctoLabs.com/railsconf2016
Lambda Pricing Example
3 million executions per month
512MB of memory
1 second execution time
$18.74 per month
@jagthedrummer - OctoLabs.com/railsconf2016
Lambda Pricing Example
3 million executions per month
512MB of memory
0.5 second execution time
$6.24 per month
@jagthedrummer - OctoLabs.com/railsconf2016
Lambda Pricing Example
3 million executions per month
512MB of memory
0.2 second execution time
$0.40 per month
@jagthedrummer - OctoLabs.com/railsconf2016
Lambda Lifecycle
!
1. You upload your code
2. Amazon doesn't do anything
@jagthedrummer - OctoLabs.com/railsconf2016
Lambda Cold Start ❄
1. AWS Receives Execution Request
2. Container is provisioned
3. Container is loaded with your code
4. Your code begins execution
5. Your code returns a result
@jagthedrummer - OctoLabs.com/railsconf2016
Time Passes
!
(But not too much)
@jagthedrummer - OctoLabs.com/railsconf2016
Lambda Container Reuse
1. AWS Receives Execution Request
2. Your code begins execution
3. Your code returns a result
@jagthedrummer - OctoLabs.com/railsconf2016
Possible Architectures
→ Monolithic
→ Microservices
→ Nanoservices
@jagthedrummer - OctoLabs.com/railsconf2016
Monolithic Architecture
→ A single Lambda
handles multiple concerns
→ Multiple API Gateway
endpoints map to one Lambda
→ Cold start will be slow
@jagthedrummer - OctoLabs.com/railsconf2016
Microservices Architecture
→ A single Lambda function for each concern/
resource
→ Multiple API Gateway enpoints map
to multiple Lambdas
→ Cold start not as slow
@jagthedrummer - OctoLabs.com/railsconf2016
Nanoservices Architecture
→ A single Lambda function
for each logical function
→ One-to-one mapping between
API Gateway & Lambda
→ Fastest cold start
@jagthedrummer - OctoLabs.com/railsconf2016

More Related Content

PDF
Spark Job Server and Spark as a Query Engine (Spark Meetup 5/14)
PDF
CliqueSquare processing
PDF
Spark Summit Europe: Building a REST Job Server for interactive Spark as a se...
PDF
Best Practices for Middleware and Integration Architecture Modernization with...
PPTX
Apache Camel K - Copenhagen
PDF
Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...
PDF
State of integration with Apache Camel (ApacheCon 2019)
PDF
SouJava May 2020: Apache Camel 3 - the next generation of enterprise integration
Spark Job Server and Spark as a Query Engine (Spark Meetup 5/14)
CliqueSquare processing
Spark Summit Europe: Building a REST Job Server for interactive Spark as a se...
Best Practices for Middleware and Integration Architecture Modernization with...
Apache Camel K - Copenhagen
Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...
State of integration with Apache Camel (ApacheCon 2019)
SouJava May 2020: Apache Camel 3 - the next generation of enterprise integration

What's hot (18)

PDF
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
PPTX
Apache Camel K - Copenhagen v2
PDF
WordPress RESTful API & Amazon API Gateway (English version)
PPTX
Integrating microservices with apache camel on kubernetes
PPTX
Serverless integration with Knative and Apache Camel on Kubernetes
PDF
Origins of Serverless
ODP
Integration using Apache Camel and Groovy
PDF
Мониторинг облачной CI-системы на примере Jenkins / Александр Акбашев (HERE T...
PDF
Killer Docker Workflows for Development
PDF
Beyond Parallelize and Collect by Holden Karau
PDF
DevOps.2D: two dimensions
of engineering
PDF
How does that PySpark thing work? And why Arrow makes it faster?
PDF
Getting started with Apache Camel - jDays 2013
ODP
Docker for Developers - PHP Detroit 2018
ODP
Getting Started with Apache Camel at DevNation 2014
PDF
How to Extend Apache Spark with Customized Optimizations
ODP
Getting Started with Apache Camel - Devconf Conference - February 2013
PPTX
CQRS + ES with Scala and Akka
Understanding Akka Streams, Back Pressure, and Asynchronous Architectures
Apache Camel K - Copenhagen v2
WordPress RESTful API & Amazon API Gateway (English version)
Integrating microservices with apache camel on kubernetes
Serverless integration with Knative and Apache Camel on Kubernetes
Origins of Serverless
Integration using Apache Camel and Groovy
Мониторинг облачной CI-системы на примере Jenkins / Александр Акбашев (HERE T...
Killer Docker Workflows for Development
Beyond Parallelize and Collect by Holden Karau
DevOps.2D: two dimensions
of engineering
How does that PySpark thing work? And why Arrow makes it faster?
Getting started with Apache Camel - jDays 2013
Docker for Developers - PHP Detroit 2018
Getting Started with Apache Camel at DevNation 2014
How to Extend Apache Spark with Customized Optimizations
Getting Started with Apache Camel - Devconf Conference - February 2013
CQRS + ES with Scala and Akka
Ad

Viewers also liked (20)

PPTX
2016-08-25 TechExeter - going serverless with Azure
PDF
Serverless and IoT - Philipp Muns
PPTX
2016 ISSA Conference Threat Intelligence Keynote philA
PPTX
Go Serverless with Azure Functions
PPTX
Belgian Windows Server 2012 Launch windows azure insights for the enterprise ...
PPTX
Big data streaming with Apache Spark on Azure
PPTX
Azure api app métricas com application insights
PPTX
SQLSaturday #230 - Introduction to Microsoft Big Data (Part 1)
PPTX
Microsoft NYC 14
PDF
Fraud Detection using Hadoop
PDF
Enterprise Data Workflows with Cascading and Windows Azure HDInsight
PPTX
PPTX
Software scope
PPTX
Azure Stream Analytics : Analyse Data in Motion
PDF
Azure HDInsight
PPTX
Going serverless
PPTX
Open up to a better learning ecosystem
PPTX
Azure functions
PPTX
Spark on Azure HDInsight - spark meetup seattle
PPTX
Azure IoT Hub on a Toradex Colibri VF61 – Part 1 - Sending data to the cloud
2016-08-25 TechExeter - going serverless with Azure
Serverless and IoT - Philipp Muns
2016 ISSA Conference Threat Intelligence Keynote philA
Go Serverless with Azure Functions
Belgian Windows Server 2012 Launch windows azure insights for the enterprise ...
Big data streaming with Apache Spark on Azure
Azure api app métricas com application insights
SQLSaturday #230 - Introduction to Microsoft Big Data (Part 1)
Microsoft NYC 14
Fraud Detection using Hadoop
Enterprise Data Workflows with Cascading and Windows Azure HDInsight
Software scope
Azure Stream Analytics : Analyse Data in Motion
Azure HDInsight
Going serverless
Open up to a better learning ecosystem
Azure functions
Spark on Azure HDInsight - spark meetup seattle
Azure IoT Hub on a Toradex Colibri VF61 – Part 1 - Sending data to the cloud
Ad

Similar to Going serverless (20)

PDF
Real world serverless - architecture, patterns and lessons learned
PDF
Surviving Serverless Testing: The ultimate Guide
PDF
12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...
PDF
Serverless Architectural Patterns & Best Practices
PDF
.NET Architects Day - DNAD 2011
PDF
09 - Fábio Akita - Além do rails
PPTX
muCon 2017 - 12 Factor Serverless Applications
PDF
Navigate Data Service using AWS
PDF
Picking the right AWS backend for your Java application (May 2017)
PDF
Serverless in production, an experience report (FullStack 2018)
PDF
Serverless in Production, an experience report (AWS UG South Wales)
PDF
Serverless in production, an experience report (Going Serverless)
ODP
Effective DevSecOps
PPT
Ruby on Rails workshop for beginner
PDF
Serverless in production, an experience report
PDF
Development in the could: How do we do it(Cloud computing. Microservices. Faas)
PDF
What’s new in serverless - re:Invent 2020
PDF
Cloud Native Applications on OpenShift
PDF
Works with persistent graphs using OrientDB
KEY
Software architectures for the cloud
Real world serverless - architecture, patterns and lessons learned
Surviving Serverless Testing: The ultimate Guide
12 Factor Serverless Applications - Mike Morain, AWS - Cloud Native Day Tel A...
Serverless Architectural Patterns & Best Practices
.NET Architects Day - DNAD 2011
09 - Fábio Akita - Além do rails
muCon 2017 - 12 Factor Serverless Applications
Navigate Data Service using AWS
Picking the right AWS backend for your Java application (May 2017)
Serverless in production, an experience report (FullStack 2018)
Serverless in Production, an experience report (AWS UG South Wales)
Serverless in production, an experience report (Going Serverless)
Effective DevSecOps
Ruby on Rails workshop for beginner
Serverless in production, an experience report
Development in the could: How do we do it(Cloud computing. Microservices. Faas)
What’s new in serverless - re:Invent 2020
Cloud Native Applications on OpenShift
Works with persistent graphs using OrientDB
Software architectures for the cloud

Recently uploaded (20)

PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Machine learning based COVID-19 study performance prediction
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
A comparative analysis of optical character recognition models for extracting...
Unlocking AI with Model Context Protocol (MCP)
NewMind AI Weekly Chronicles - August'25-Week II
Univ-Connecticut-ChatGPT-Presentaion.pdf
Empathic Computing: Creating Shared Understanding
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Encapsulation_ Review paper, used for researhc scholars
Accuracy of neural networks in brain wave diagnosis of schizophrenia
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
Programs and apps: productivity, graphics, security and other tools
Spectral efficient network and resource selection model in 5G networks
Machine learning based COVID-19 study performance prediction
Reach Out and Touch Someone: Haptics and Empathic Computing
Agricultural_Statistics_at_a_Glance_2022_0.pdf
A comparative study of natural language inference in Swahili using monolingua...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf

Going serverless