SlideShare ist ein Scribd-Unternehmen logo
1 von 57
Downloaden Sie, um offline zu lesen
SERVERLESS
MARIUSZ RICHTSCHEID
GLIWICE, 28.01.2020
SERVERLESS NODE.JS
ABOUT ME
‣ LEAD NODE.JS DEVELOPER IN
THE SOFTWARE HOUSE

‣ RICHTSCHEID@GMAIL.COM

‣ LINKEDIN.COM/IN/RICHTSCHEID

‣ GITHUB.COM/BAROGRAFMARIUSZ RICHTSCHEID
SERVERLESS NODE.JS
AGENDA
‣ ARE THERE SERVERS IN SERVERLESS?

‣ SHOULD I BOTHER?

‣ MOST COMMON CLOUD COMPUTING SERVICE MODELS

‣ WHICH PROVIDER TO CHOOSE?

‣ CHOOSING THE RIGHT FRAMEWORK

‣ HELLO WORLD EXAMPLE

‣ MIGRATING TRANSLATIONS SERVICE CALLED BABELSHEET TO
SERVERLESS
ARE THERE SERVERS IN SERVERLESS?
SERVERLESS NODE.JS
OF COURSE THERE ARE...
‣ SERVERS MANAGEMENT AND PROVISIONING
OUTSOURCED TO VENDOR 

‣ DYNAMIC SCALING, NO NEED FOR CAPACITY
PLANNING 

‣ PAY ONLY FOR WHAT YOU USE, OPTIMIZE FOR COST
SAVINGS

‣ TIME TO MARKET AND EXPERIMENTATION
SERVERLESS NODE.JS
WHAT ABOUT DEVOPS?
‣ A LOT OF IS OUTSOURCED BUT...

‣ YOU STILL NEED TO MONITOR YOUR APPLICATION

‣ AND HAVE STRATEGY FOR DEPLOYMENTS 

‣ ALSO CONSIDER SECURITY, NETWORKING,
DEBUGGING, WHOLE SYSTEM SCALING, ETC.
SHOULD I BOTHER?
SERVERLESS NODE.JS
‣ POSTLIGHT READABILITY API BEFORE SERVERLESS 

• $10,000 MONTHLY COST 

• 39 MILLION REQUESTS PER MONTH (AROUND 15 PER SECOND)

‣ AFTER SERVERLESS 

• NEW SERVICE NAME IS MERCURY WEB PARSER 

• $370 MONTHLY COST (API GATEWAY + LAMBDA)
SERVERLESS NODE.JS
THERE ARE ALWAYS SOME CONS
‣ VENDOR CONTROL AND LOCK-IN

‣ STATELESS, NO LONG-RUNNING PROCESSES

‣ LIMITS ON EXECUTION TIME, MEMORY
MOST COMMON CLOUD COMPUTING
SERVICE MODELS
SOURCE: HTTPS://MEDIUM.COM/@SDORZAK/WHY-SERVERLESS-IS-THE-NEW-BLACK-E4FF9E9947E0
‣ AMAZON EC2

‣ GOOGLE
COMPUTE
ENGINE
‣ AWS LAMBDA

‣ GOOGLE
CLOUD
FUNCTIONS
‣ AWS ELASTIC
BEANSTALK 

‣ HEROKU

‣ GOOGLE APP
ENGINE
YOU MANAGE
{
IAAS
‣ GOOGLE APPS

‣ SALESFORCE

‣ DROPBOX
{PROVIDER
PAAS FAAS SAAS
SERVERLESS NODE.JS
PAAS VS FAAS
‣ SYSTEM RUNS SERVER
PROCESS WHICH HANDLES
REQUESTS 

‣ SCALING MEANS ADDING MORE
PROCESSES 

‣ CHARGE PER RUNNING TIME
‣ NO LONG-RUNNING PROCESSES,
EACH REQUEST HANDLED BY
FUNCTION EXECUTION 

‣ SCALING MEANS EXECUTING
MORE FUNCTIONS CONCURRENTLY 

‣ CHARGE PER EXECUTION
WHICH PROVIDER TO CHOOSE?
SERVERLESS NODE.JS
INTRODUCING LAMBDA
‣ VARIOUS RUNTIMES: GO, .NET, JAVA, RUBY, PYTHON, NODE.JS (V10, V12)

‣ PRICING

• 1M REQUESTS FREE

• $0.20 PER 1M REQUESTS THEREAFTER

• 400,000 GB-SECONDS FREE

• $0.00001667 GB-SECOND THEREAFTER
SERVERLESS NODE.JS
INTRODUCING LAMBDA
‣ LIMITS

• MEMORY RANGE - FROM 128MB TO 3008MB

• MAX EXECUTION DURATION - 15MIN

• CONCURRENT EXECUTIONS - 1000 (DEFAULT, CAN BE INCREASED)

• DEPLOYMENT PACKAGE SIZE - 50MB (ZIPPED) OR 250MB (UNZIPPED)
CHOOSING THE RIGHT FRAMEWORK
BUT WHY DO WE NEED
FRAMEWORK AT ALL?
SERVERLESS NODE.JS
PROS OF HAVING A FRAMEWORK
‣ AUTOMATES WHAT CAN BE DONE WITH AWS
CONSOLE OR CLI

‣ TRANSLATES SIMPLE CONFIGURATION FILE
INTO COMPLEX INFRASTRUCTURE
(CLOUDFORMATION UNDER THE HOOD)

‣ USUALLY PLUGGABLE
SERVERLESS NODE.JS
CHOOSING THE RIGHT FRAMEWORK
‣ PLATFORM AGNOSTIC (IN THEORY)

‣ MORE DEPLOYMENT OPTIONS
(MULTIPLE PROVIDERS, LESS
COMMANDS)

‣ WORSE INFRASTRUCTURE
EMULATION
AWS
SAM
‣ FOR AWS ONLY

‣ LESS DEPLOYMENT OPTIONS

‣ BETTER INFRASTRUCTURE
EMULATION (API GATEWAY,
LAMBDA API, FAKE EVENTS)
SERVERLESS NODE.JS
CHOOSING THE RIGHT FRAMEWORK
‣ PLATFORM AGNOSTIC (IN THEORY)

‣ MORE DEPLOYMENT OPTIONS
(MULTIPLE PROVIDERS, LESS
COMMANDS)

‣ WORSE INFRASTRUCTURE
EMULATION
AWS
SAM
‣ FOR AWS ONLY

‣ LESS DEPLOYMENT OPTIONS

‣ BETTER INFRASTRUCTURE
EMULATION (API GATEWAY,
LAMBDA API, FAKE EVENTS)
HELLO WORLD EXAMPLE
SERVERLESS NODE.JS
HELLO WORLD EXAMPLE
exports.handler = async
(event, context) => {
return {
statusCode: 200,
body: 'hello world'
};
};
INDEX.JS
‣EVENT
• INPUT DATA FROM OTHER SOURCES 

‣CONTEXT
• REMAINING TIME

• REQUEST ID

• FUNCTION NAME

• ETC.
SERVERLESS NODE.JS
service: hello-world
provider:
name: aws
runtime: nodejs12.x
stage: dev
region: us-east-1
functions:
api:
handler: index.handler
events:
- http: ANY /
- http: 'ANY {proxy+}'
SERVERLESS.YML
HELLO WORLD EXAMPLE
‣EVENTS FROM:
• S3

• DYNAMODB

• SIMPLE NOTIFICATION SERVICE

• SIMPLE EMAIL SERVICE

• CLOUDFORMATION

• ALEXA
SERVERLESS NODE.JS
HELLO WORLD EXAMPLE
SERVERLESS NODE.JS
WHAT HAS JUST HAPPENED?
FUNCTIONFIRST INVOCATION RESULT
COLD START
CONTAINER
FUNCTIONSECOND INVOCATION RESULT
CONTAINER
EPHEMERAL CACHE
MIGRATING BABELSHEET TO
SERVERLESS
SERVERLESS NODE.JS
BABELSHEET
‣ TRANSLATIONS MANAGEMENT SYSTEM

‣ GOOGLE SPREADSHEET AS A USER INTERFACE

‣ GENERATES TRANSLATIONS IN VARIOUS FORMATS
THROUGH CLI OR WEB SERVER

‣ AVAILABLE AT HTTPS://GITHUB.COM/
THESOFTWAREHOUSE/BABELSHEET-JS
SERVERLESS NODE.JS
BABELSHEET BEFORE FAAS
SERVERLESS NODE.JS
BABELSHEET AFTER FAAS
WHAT ARE THE STEPS TO MIGRATE APP?
SERVERLESS NODE.JS
THINGS TO START WITH
‣ MIGHT BE STATEFUL

‣ SUPPORTS LONG-RUNNING
PROCESSES
BEFORE FAAS
‣ MUST BE STATELESS

‣ NO LONG-RUNNING
PROCESSES
AFTER FAAS
SERVERLESS NODE.JS
MORE STEPS FOR MIGRATION
‣ USE ENVIRONMENT VARIABLES TO PROVIDE CONFIG 

‣ MAKE STORAGE ABSTRACTION, INJECT PROPER
STORAGE IMPLEMENTATION TO IOC CONTAINER 

‣ WRITE FUNCTIONS HANDLERS (MORE OR LESS
GRANULAR)

‣ PREPARE STACK PROVISIONING
SERVERLESS NODE.JS
API ENTRY POINT (BEFORE)
import * as awilix from "awilix";
import * as dotenv from "dotenv";
import RedisStorage from "../shared/storage/redis";
import createContainer from "./container";
import Server from "./server/server";
dotenv.config();
const container = createContainer({
storage: awilix.asClass(RedisStorage)
});
const server = container.resolve<Server>("server").getApp();
server.listen(container.resolve("port"));
SERVERLESS NODE.JS
import * as awilix from "awilix";
import * as dotenv from "dotenv";
import RedisStorage from "../shared/storage/redis";
import createContainer from "./container";
import Server from "./server/server";
dotenv.config();
const container = createContainer({
storage: awilix.asClass(RedisStorage)
});
const server = container.resolve<Server>("server").getApp();
server.listen(container.resolve("port"));
API ENTRY POINT (BEFORE)
SERVERLESS NODE.JS
import * as awilix from "awilix";
import * as dotenv from "dotenv";
import * as serverless from "serverless-http";
import DynamoDbStorage from "../shared/storage/dynamoDb";
import createContainer from "./container";
import Server from "./server/server";
dotenv.config();
const container = createContainer({
storage: awilix.asClass(DynamoDbStorage)
});
const server = container.resolve<Server>("server").getApp();
export const handler = serverless(server);
API FUNCTION HANDLER (AFTER)
SERVERLESS NODE.JS
API FUNCTION HANDLER (AFTER)
import * as awilix from "awilix";
import * as dotenv from "dotenv";
import * as serverless from "serverless-http";
import DynamoDbStorage from "../shared/storage/dynamoDb";
import createContainer from "./container";
import Server from "./server/server";
dotenv.config();
const container = createContainer({
storage: awilix.asClass(DynamoDbStorage)
});
const server = container.resolve<Server>("server").getApp();
export const handler = serverless(server);
SERVERLESS NODE.JS
PRODUCER MAIN LOGIC
async function main() {
const spreadsheetData = await container
.resolve<GoogleSheets>("googleSheets")
.fetchSpreadsheet();
const transformedData = await container
.resolve<ITransformer>("transformer")
.transform(spreadsheetData);
container
.resolve<TranslationsStorage>("translationsStorage")
.setTranslations(transformedData);
}
SERVERLESS NODE.JS
PRODUCER ENTRY POINT (BEFORE)
import * as scheduler from "node-schedule";
scheduler.scheduleJob("* * * * *", () => {
main();
});
SERVERLESS NODE.JS
PRODUCER FUNCTION HANDLER (AFTER)
export const handler = async (event, context) => {
try {
await main();
} catch (error) {
return {
body: error.message || "Internal server error",
statusCode: error.statusCode || 500
};
}
return {
body: JSON.stringify({ result: "ok" }),
statusCode: 200
};
};
SERVERLESS NODE.JS
PROVISIONING CONFIG (PROVIDER)
service: serverless-translations
plugins:
- serverless-plugin-typescript
provider:
name: aws
runtime: nodejs12.x
stage: dev
region: us-east-1
environment:
DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage}
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: "arn:aws:dynamodb:${opt:region,
self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"
SERVERLESS NODE.JS
PROVISIONING CONFIG (PROVIDER)
service: serverless-translations
plugins:
- serverless-plugin-typescript
provider:
name: aws
runtime: nodejs12.x
stage: dev
region: us-east-1
environment:
DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage}
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: "arn:aws:dynamodb:${opt:region,
self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"
SERVERLESS NODE.JS
PROVISIONING CONFIG (PROVIDER)
service: serverless-translations
plugins:
- serverless-plugin-typescript
provider:
name: aws
runtime: nodejs12.x
stage: dev
region: us-east-1
environment:
DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage}
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: "arn:aws:dynamodb:${opt:region,
self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"
SERVERLESS NODE.JS
PROVISIONING CONFIG (FUNCTIONS)
functions:
api:
handler: src/api/serverless.handler
events:
- http: ANY /
- http: "ANY {proxy+}"
producer:
handler: src/producer/serverless.handler
environment:
token: ${ssm:token~true}
CLIENT_ID: ${ssm:CLIENT_ID~true}
CLIENT_SECRET: ${ssm:CLIENT_SECRET~true}
events:
- schedule: rate(5 minutes)
SERVERLESS NODE.JS
PROVISIONING CONFIG (FUNCTIONS)
functions:
api:
handler: src/api/serverless.handler
events:
- http: ANY /
- http: "ANY {proxy+}"
producer:
handler: src/producer/serverless.handler
environment:
token: ${ssm:token~true}
CLIENT_ID: ${ssm:CLIENT_ID~true}
CLIENT_SECRET: ${ssm:CLIENT_SECRET~true}
events:
- schedule: rate(5 minutes)
SERVERLESS NODE.JS
PROVISIONING CONFIG (FUNCTIONS)
functions:
api:
handler: src/api/serverless.handler
events:
- http: ANY /
- http: "ANY {proxy+}"
producer:
handler: src/producer/serverless.handler
environment:
token: ${ssm:token~true}
CLIENT_ID: ${ssm:CLIENT_ID~true}
CLIENT_SECRET: ${ssm:CLIENT_SECRET~true}
events:
- schedule: rate(5 minutes)
SERVERLESS NODE.JS
PROVISIONING CONFIG (RESOURCES)
resources:
Resources:
TranslationsDynamoDbTable:
Type: "AWS::DynamoDB::Table"
DeletionPolicy: Delete
Properties:
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: ${self:provider.environment.DYNAMODB_TABLE}
SERVERLESS NODE.JS
AWS CONSOLE PREVIEW AFTER DEPLOY
SERVERLESS NODE.JS
INVOKING A FUNCTION
SERVERLESS NODE.JS
CHECKING APP METRICS
SERVERLESS NODE.JS
OPTIMIZATION STEPS
‣ HTTP CACHE ON API GATEWAY (REDUCE TIME,
COST)

‣ LOWER MEMORY LIMIT

‣ USE EXECUTION CONTEXT FOR LOCAL CACHE

‣ USE FAST STORAGE SOLUTION, E.G. REDIS
SERVERLESS NODE.JS
SUMMARY
‣ CALCULATE IF IT IS
FOR YOU, CONSIDER
PRICING AND
LIMITATIONS

‣ CHOOSE PROPER
PROVIDER AND
FRAMEWORK
‣ PREPARE YOUR APP
FOR GOING
SERVERLESS

‣ WRITE FUNCTION
HANDLERS,
PROVISIONING CONFIG

‣ DEPLOY, OPTIMIZE,
REPEAT
SERVERLESS NODE.JS
WORTH KNOWING
‣ AWS STEP FUNCTIONS

‣ LAMBDA LAYERS

‣ BLUE/GREEN
DEPLOYMENTS

‣ GRAPHQL ENDPOINTS

‣ GOOGLE CLOUD RUN
(KNATIVE)
THANK YOU!
ICONS MADE BY ICON POND FROM WWW.FLATICON.COM 
HTTP://TSH.IO/MICROSERVICES
NEWSLETTER FOR DEVS AND TECH LEADERS
HTTPS://TSH.IO/NEWSLETTER

Weitere ähnliche Inhalte

Was ist angesagt?

JavaDay Lviv: Serverless Archtiectures
JavaDay Lviv: Serverless ArchtiecturesJavaDay Lviv: Serverless Archtiectures
JavaDay Lviv: Serverless ArchtiecturesAntons Kranga
 
Continuous Delivery and Infrastructure as Code
Continuous Delivery and Infrastructure as CodeContinuous Delivery and Infrastructure as Code
Continuous Delivery and Infrastructure as CodeSascha Möllering
 
Riga Dev Day 2016 - Microservices with Apache Camel & fabric8 on Kubernetes
Riga Dev Day 2016 - Microservices with Apache Camel & fabric8 on KubernetesRiga Dev Day 2016 - Microservices with Apache Camel & fabric8 on Kubernetes
Riga Dev Day 2016 - Microservices with Apache Camel & fabric8 on KubernetesClaus Ibsen
 
Sebastien goasguen cloud stack the next year
Sebastien goasguen   cloud stack the next yearSebastien goasguen   cloud stack the next year
Sebastien goasguen cloud stack the next yearShapeBlue
 
Netflix0SS Services on Docker
Netflix0SS Services on DockerNetflix0SS Services on Docker
Netflix0SS Services on DockerDocker, Inc.
 
[GID Live] Open-Source Cloud-Native Programming Language
[GID Live] Open-Source Cloud-Native Programming Language[GID Live] Open-Source Cloud-Native Programming Language
[GID Live] Open-Source Cloud-Native Programming LanguageBallerinalang
 
Kubernetes for Serverless - Serverless Summit 2017 - Krishna Kumar
Kubernetes for Serverless  - Serverless Summit 2017 - Krishna KumarKubernetes for Serverless  - Serverless Summit 2017 - Krishna Kumar
Kubernetes for Serverless - Serverless Summit 2017 - Krishna KumarCodeOps Technologies LLP
 
NGINX Installation and Tuning
NGINX Installation and TuningNGINX Installation and Tuning
NGINX Installation and TuningNGINX, Inc.
 
Run your Dockerized ASP.NET application on Windows and Linux!
Run your Dockerized ASP.NET application on Windows and Linux!Run your Dockerized ASP.NET application on Windows and Linux!
Run your Dockerized ASP.NET application on Windows and Linux!Alex Thissen
 
Microservices and Container Management with NGINX Plus and Mesosphere DC/OS
Microservices and Container Management with NGINX Plus and Mesosphere DC/OSMicroservices and Container Management with NGINX Plus and Mesosphere DC/OS
Microservices and Container Management with NGINX Plus and Mesosphere DC/OSNGINX, Inc.
 
2017 Microservices Practitioner Virtual Summit: The Mechanics of Deploying En...
2017 Microservices Practitioner Virtual Summit: The Mechanics of Deploying En...2017 Microservices Practitioner Virtual Summit: The Mechanics of Deploying En...
2017 Microservices Practitioner Virtual Summit: The Mechanics of Deploying En...Ambassador Labs
 
What's New in NGINX Plus R10?
What's New in NGINX Plus R10?What's New in NGINX Plus R10?
What's New in NGINX Plus R10?NGINX, Inc.
 
Gatekeeper: API gateway
Gatekeeper: API gatewayGatekeeper: API gateway
Gatekeeper: API gatewayChengHui Weng
 
What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...
What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...
What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...HostedbyConfluent
 
Building occasionally connected applications using event sourcing
Building occasionally connected applications using event sourcingBuilding occasionally connected applications using event sourcing
Building occasionally connected applications using event sourcingDennis Doomen
 
Andrea Di Persio
Andrea Di PersioAndrea Di Persio
Andrea Di PersioCodeFest
 

Was ist angesagt? (20)

JavaDay Lviv: Serverless Archtiectures
JavaDay Lviv: Serverless ArchtiecturesJavaDay Lviv: Serverless Archtiectures
JavaDay Lviv: Serverless Archtiectures
 
Continuous Delivery and Infrastructure as Code
Continuous Delivery and Infrastructure as CodeContinuous Delivery and Infrastructure as Code
Continuous Delivery and Infrastructure as Code
 
ASP.NET vNext
ASP.NET vNextASP.NET vNext
ASP.NET vNext
 
Riga Dev Day 2016 - Microservices with Apache Camel & fabric8 on Kubernetes
Riga Dev Day 2016 - Microservices with Apache Camel & fabric8 on KubernetesRiga Dev Day 2016 - Microservices with Apache Camel & fabric8 on Kubernetes
Riga Dev Day 2016 - Microservices with Apache Camel & fabric8 on Kubernetes
 
Sebastien goasguen cloud stack the next year
Sebastien goasguen   cloud stack the next yearSebastien goasguen   cloud stack the next year
Sebastien goasguen cloud stack the next year
 
Netflix0SS Services on Docker
Netflix0SS Services on DockerNetflix0SS Services on Docker
Netflix0SS Services on Docker
 
[GID Live] Open-Source Cloud-Native Programming Language
[GID Live] Open-Source Cloud-Native Programming Language[GID Live] Open-Source Cloud-Native Programming Language
[GID Live] Open-Source Cloud-Native Programming Language
 
Kubernetes for Serverless - Serverless Summit 2017 - Krishna Kumar
Kubernetes for Serverless  - Serverless Summit 2017 - Krishna KumarKubernetes for Serverless  - Serverless Summit 2017 - Krishna Kumar
Kubernetes for Serverless - Serverless Summit 2017 - Krishna Kumar
 
NGINX Installation and Tuning
NGINX Installation and TuningNGINX Installation and Tuning
NGINX Installation and Tuning
 
Run your Dockerized ASP.NET application on Windows and Linux!
Run your Dockerized ASP.NET application on Windows and Linux!Run your Dockerized ASP.NET application on Windows and Linux!
Run your Dockerized ASP.NET application on Windows and Linux!
 
Docker in Production at the Aurora Team
Docker in Production at the Aurora TeamDocker in Production at the Aurora Team
Docker in Production at the Aurora Team
 
Service Discovery 101
Service Discovery 101Service Discovery 101
Service Discovery 101
 
Externalized Spring Boot App Configuration
Externalized  Spring Boot App ConfigurationExternalized  Spring Boot App Configuration
Externalized Spring Boot App Configuration
 
Microservices and Container Management with NGINX Plus and Mesosphere DC/OS
Microservices and Container Management with NGINX Plus and Mesosphere DC/OSMicroservices and Container Management with NGINX Plus and Mesosphere DC/OS
Microservices and Container Management with NGINX Plus and Mesosphere DC/OS
 
2017 Microservices Practitioner Virtual Summit: The Mechanics of Deploying En...
2017 Microservices Practitioner Virtual Summit: The Mechanics of Deploying En...2017 Microservices Practitioner Virtual Summit: The Mechanics of Deploying En...
2017 Microservices Practitioner Virtual Summit: The Mechanics of Deploying En...
 
What's New in NGINX Plus R10?
What's New in NGINX Plus R10?What's New in NGINX Plus R10?
What's New in NGINX Plus R10?
 
Gatekeeper: API gateway
Gatekeeper: API gatewayGatekeeper: API gateway
Gatekeeper: API gateway
 
What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...
What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...
What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...
 
Building occasionally connected applications using event sourcing
Building occasionally connected applications using event sourcingBuilding occasionally connected applications using event sourcing
Building occasionally connected applications using event sourcing
 
Andrea Di Persio
Andrea Di PersioAndrea Di Persio
Andrea Di Persio
 

Ähnlich wie Serverless architecture: introduction & first steps

BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step Functions
BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step FunctionsBUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step Functions
BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step FunctionsRaphael Londner
 
Going Serverless on AWS with Golang and SAM
Going Serverless on AWS with Golang and SAMGoing Serverless on AWS with Golang and SAM
Going Serverless on AWS with Golang and SAMGeorge Tourkas
 
Serverless Apps on Google Cloud: more dev, less ops
Serverless Apps on Google Cloud:  more dev, less opsServerless Apps on Google Cloud:  more dev, less ops
Serverless Apps on Google Cloud: more dev, less opsJoseph Lust
 
Serverless Apps on Google Cloud: more dev, less ops
Serverless Apps on Google Cloud: more dev, less opsServerless Apps on Google Cloud: more dev, less ops
Serverless Apps on Google Cloud: more dev, less opsmabl
 
Čtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal HatákČtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal HatákCtvrtkoncz
 
The Good Parts / The Hard Parts
The Good Parts / The Hard PartsThe Good Parts / The Hard Parts
The Good Parts / The Hard PartsNoah Zoschke
 
Building a Serverless company with Node.js, React and the Serverless Framewor...
Building a Serverless company with Node.js, React and the Serverless Framewor...Building a Serverless company with Node.js, React and the Serverless Framewor...
Building a Serverless company with Node.js, React and the Serverless Framewor...Luciano Mammino
 
A Node.js Developer's Guide to Bluemix
A Node.js Developer's Guide to BluemixA Node.js Developer's Guide to Bluemix
A Node.js Developer's Guide to Bluemixibmwebspheresoftware
 
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
 Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbsAWS Chicago
 
Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020Andrea Scuderi
 
More efficient, usable web
More efficient, usable webMore efficient, usable web
More efficient, usable webChris Mills
 
Client-Server-Kommunikation mit dem Command Pattern
Client-Server-Kommunikation mit dem Command PatternClient-Server-Kommunikation mit dem Command Pattern
Client-Server-Kommunikation mit dem Command Patternpgt technology scouting GmbH
 
AWS Webinar 23 - Getting Started with AWS - Understanding total cost of owner...
AWS Webinar 23 - Getting Started with AWS - Understanding total cost of owner...AWS Webinar 23 - Getting Started with AWS - Understanding total cost of owner...
AWS Webinar 23 - Getting Started with AWS - Understanding total cost of owner...Cobus Bernard
 
Future of Serverless
Future of ServerlessFuture of Serverless
Future of ServerlessYoav Avrahami
 
AWS Lambda, Step Functions & MongoDB Atlas Tutorial
AWS Lambda, Step Functions & MongoDB Atlas TutorialAWS Lambda, Step Functions & MongoDB Atlas Tutorial
AWS Lambda, Step Functions & MongoDB Atlas TutorialMongoDB
 
The Good, Bad and Ugly of Serverless
The Good, Bad and Ugly of ServerlessThe Good, Bad and Ugly of Serverless
The Good, Bad and Ugly of ServerlessPipedrive
 
What’s new in serverless - re:Invent 2020
What’s new in serverless - re:Invent 2020What’s new in serverless - re:Invent 2020
What’s new in serverless - re:Invent 2020AWS Chicago
 
AWS Community Day 2022 Dhiraj Mahapatro_AWS Lambda under the hood _ Best Prac...
AWS Community Day 2022 Dhiraj Mahapatro_AWS Lambda under the hood _ Best Prac...AWS Community Day 2022 Dhiraj Mahapatro_AWS Lambda under the hood _ Best Prac...
AWS Community Day 2022 Dhiraj Mahapatro_AWS Lambda under the hood _ Best Prac...AWS Chicago
 
AWS Summit Singapore - Lambda, Step Functions and Datadog: A Symphony
AWS Summit Singapore - Lambda, Step Functions and Datadog: A SymphonyAWS Summit Singapore - Lambda, Step Functions and Datadog: A Symphony
AWS Summit Singapore - Lambda, Step Functions and Datadog: A SymphonyAmazon Web Services
 

Ähnlich wie Serverless architecture: introduction & first steps (20)

BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step Functions
BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step FunctionsBUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step Functions
BUILDING Serverless apps with MongoDB AtLAS, AWS Lambda and Step Functions
 
Going Serverless on AWS with Golang and SAM
Going Serverless on AWS with Golang and SAMGoing Serverless on AWS with Golang and SAM
Going Serverless on AWS with Golang and SAM
 
Serverless Apps on Google Cloud: more dev, less ops
Serverless Apps on Google Cloud:  more dev, less opsServerless Apps on Google Cloud:  more dev, less ops
Serverless Apps on Google Cloud: more dev, less ops
 
Serverless Apps on Google Cloud: more dev, less ops
Serverless Apps on Google Cloud: more dev, less opsServerless Apps on Google Cloud: more dev, less ops
Serverless Apps on Google Cloud: more dev, less ops
 
Čtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal HatákČtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal Haták
 
The Good Parts / The Hard Parts
The Good Parts / The Hard PartsThe Good Parts / The Hard Parts
The Good Parts / The Hard Parts
 
Building a Serverless company with Node.js, React and the Serverless Framewor...
Building a Serverless company with Node.js, React and the Serverless Framewor...Building a Serverless company with Node.js, React and the Serverless Framewor...
Building a Serverless company with Node.js, React and the Serverless Framewor...
 
A Node.js Developer's Guide to Bluemix
A Node.js Developer's Guide to BluemixA Node.js Developer's Guide to Bluemix
A Node.js Developer's Guide to Bluemix
 
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
 Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
 
Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020
 
More efficient, usable web
More efficient, usable webMore efficient, usable web
More efficient, usable web
 
Client-Server-Kommunikation mit dem Command Pattern
Client-Server-Kommunikation mit dem Command PatternClient-Server-Kommunikation mit dem Command Pattern
Client-Server-Kommunikation mit dem Command Pattern
 
Top conf serverlezz
Top conf   serverlezzTop conf   serverlezz
Top conf serverlezz
 
AWS Webinar 23 - Getting Started with AWS - Understanding total cost of owner...
AWS Webinar 23 - Getting Started with AWS - Understanding total cost of owner...AWS Webinar 23 - Getting Started with AWS - Understanding total cost of owner...
AWS Webinar 23 - Getting Started with AWS - Understanding total cost of owner...
 
Future of Serverless
Future of ServerlessFuture of Serverless
Future of Serverless
 
AWS Lambda, Step Functions & MongoDB Atlas Tutorial
AWS Lambda, Step Functions & MongoDB Atlas TutorialAWS Lambda, Step Functions & MongoDB Atlas Tutorial
AWS Lambda, Step Functions & MongoDB Atlas Tutorial
 
The Good, Bad and Ugly of Serverless
The Good, Bad and Ugly of ServerlessThe Good, Bad and Ugly of Serverless
The Good, Bad and Ugly of Serverless
 
What’s new in serverless - re:Invent 2020
What’s new in serverless - re:Invent 2020What’s new in serverless - re:Invent 2020
What’s new in serverless - re:Invent 2020
 
AWS Community Day 2022 Dhiraj Mahapatro_AWS Lambda under the hood _ Best Prac...
AWS Community Day 2022 Dhiraj Mahapatro_AWS Lambda under the hood _ Best Prac...AWS Community Day 2022 Dhiraj Mahapatro_AWS Lambda under the hood _ Best Prac...
AWS Community Day 2022 Dhiraj Mahapatro_AWS Lambda under the hood _ Best Prac...
 
AWS Summit Singapore - Lambda, Step Functions and Datadog: A Symphony
AWS Summit Singapore - Lambda, Step Functions and Datadog: A SymphonyAWS Summit Singapore - Lambda, Step Functions and Datadog: A Symphony
AWS Summit Singapore - Lambda, Step Functions and Datadog: A Symphony
 

Mehr von The Software House

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...The Software House
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?The Software House
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?The Software House
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeThe Software House
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?The Software House
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSThe Software House
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptThe Software House
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptThe Software House
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLThe Software House
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychThe Software House
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciThe Software House
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case studyThe Software House
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejThe Software House
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachThe Software House
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsThe Software House
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeThe Software House
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduThe Software House
 

Mehr von The Software House (20)

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
 
Jak poskromić AWS?
Jak poskromić AWS?Jak poskromić AWS?
Jak poskromić AWS?
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
 

Kürzlich hochgeladen

Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxAnnaArtyushina1
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benonimasabamasaba
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...masabamasaba
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 

Kürzlich hochgeladen (20)

Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 

Serverless architecture: introduction & first steps

  • 2. SERVERLESS NODE.JS ABOUT ME ‣ LEAD NODE.JS DEVELOPER IN THE SOFTWARE HOUSE ‣ RICHTSCHEID@GMAIL.COM ‣ LINKEDIN.COM/IN/RICHTSCHEID ‣ GITHUB.COM/BAROGRAFMARIUSZ RICHTSCHEID
  • 3. SERVERLESS NODE.JS AGENDA ‣ ARE THERE SERVERS IN SERVERLESS? ‣ SHOULD I BOTHER? ‣ MOST COMMON CLOUD COMPUTING SERVICE MODELS ‣ WHICH PROVIDER TO CHOOSE? ‣ CHOOSING THE RIGHT FRAMEWORK ‣ HELLO WORLD EXAMPLE ‣ MIGRATING TRANSLATIONS SERVICE CALLED BABELSHEET TO SERVERLESS
  • 4. ARE THERE SERVERS IN SERVERLESS?
  • 5. SERVERLESS NODE.JS OF COURSE THERE ARE... ‣ SERVERS MANAGEMENT AND PROVISIONING OUTSOURCED TO VENDOR ‣ DYNAMIC SCALING, NO NEED FOR CAPACITY PLANNING ‣ PAY ONLY FOR WHAT YOU USE, OPTIMIZE FOR COST SAVINGS ‣ TIME TO MARKET AND EXPERIMENTATION
  • 6. SERVERLESS NODE.JS WHAT ABOUT DEVOPS? ‣ A LOT OF IS OUTSOURCED BUT... ‣ YOU STILL NEED TO MONITOR YOUR APPLICATION ‣ AND HAVE STRATEGY FOR DEPLOYMENTS ‣ ALSO CONSIDER SECURITY, NETWORKING, DEBUGGING, WHOLE SYSTEM SCALING, ETC.
  • 8. SERVERLESS NODE.JS ‣ POSTLIGHT READABILITY API BEFORE SERVERLESS • $10,000 MONTHLY COST • 39 MILLION REQUESTS PER MONTH (AROUND 15 PER SECOND) ‣ AFTER SERVERLESS • NEW SERVICE NAME IS MERCURY WEB PARSER • $370 MONTHLY COST (API GATEWAY + LAMBDA)
  • 9. SERVERLESS NODE.JS THERE ARE ALWAYS SOME CONS ‣ VENDOR CONTROL AND LOCK-IN ‣ STATELESS, NO LONG-RUNNING PROCESSES ‣ LIMITS ON EXECUTION TIME, MEMORY
  • 10. MOST COMMON CLOUD COMPUTING SERVICE MODELS
  • 11. SOURCE: HTTPS://MEDIUM.COM/@SDORZAK/WHY-SERVERLESS-IS-THE-NEW-BLACK-E4FF9E9947E0 ‣ AMAZON EC2 ‣ GOOGLE COMPUTE ENGINE ‣ AWS LAMBDA ‣ GOOGLE CLOUD FUNCTIONS ‣ AWS ELASTIC BEANSTALK ‣ HEROKU ‣ GOOGLE APP ENGINE YOU MANAGE { IAAS ‣ GOOGLE APPS ‣ SALESFORCE ‣ DROPBOX {PROVIDER PAAS FAAS SAAS
  • 12. SERVERLESS NODE.JS PAAS VS FAAS ‣ SYSTEM RUNS SERVER PROCESS WHICH HANDLES REQUESTS 
 ‣ SCALING MEANS ADDING MORE PROCESSES 
 ‣ CHARGE PER RUNNING TIME ‣ NO LONG-RUNNING PROCESSES, EACH REQUEST HANDLED BY FUNCTION EXECUTION 
 ‣ SCALING MEANS EXECUTING MORE FUNCTIONS CONCURRENTLY 
 ‣ CHARGE PER EXECUTION
  • 13. WHICH PROVIDER TO CHOOSE?
  • 14.
  • 15.
  • 16. SERVERLESS NODE.JS INTRODUCING LAMBDA ‣ VARIOUS RUNTIMES: GO, .NET, JAVA, RUBY, PYTHON, NODE.JS (V10, V12) ‣ PRICING • 1M REQUESTS FREE • $0.20 PER 1M REQUESTS THEREAFTER • 400,000 GB-SECONDS FREE • $0.00001667 GB-SECOND THEREAFTER
  • 17. SERVERLESS NODE.JS INTRODUCING LAMBDA ‣ LIMITS • MEMORY RANGE - FROM 128MB TO 3008MB • MAX EXECUTION DURATION - 15MIN • CONCURRENT EXECUTIONS - 1000 (DEFAULT, CAN BE INCREASED) • DEPLOYMENT PACKAGE SIZE - 50MB (ZIPPED) OR 250MB (UNZIPPED)
  • 18. CHOOSING THE RIGHT FRAMEWORK
  • 19. BUT WHY DO WE NEED FRAMEWORK AT ALL?
  • 20. SERVERLESS NODE.JS PROS OF HAVING A FRAMEWORK ‣ AUTOMATES WHAT CAN BE DONE WITH AWS CONSOLE OR CLI ‣ TRANSLATES SIMPLE CONFIGURATION FILE INTO COMPLEX INFRASTRUCTURE (CLOUDFORMATION UNDER THE HOOD) ‣ USUALLY PLUGGABLE
  • 21. SERVERLESS NODE.JS CHOOSING THE RIGHT FRAMEWORK ‣ PLATFORM AGNOSTIC (IN THEORY) ‣ MORE DEPLOYMENT OPTIONS (MULTIPLE PROVIDERS, LESS COMMANDS) ‣ WORSE INFRASTRUCTURE EMULATION AWS SAM ‣ FOR AWS ONLY ‣ LESS DEPLOYMENT OPTIONS ‣ BETTER INFRASTRUCTURE EMULATION (API GATEWAY, LAMBDA API, FAKE EVENTS)
  • 22. SERVERLESS NODE.JS CHOOSING THE RIGHT FRAMEWORK ‣ PLATFORM AGNOSTIC (IN THEORY) ‣ MORE DEPLOYMENT OPTIONS (MULTIPLE PROVIDERS, LESS COMMANDS) ‣ WORSE INFRASTRUCTURE EMULATION AWS SAM ‣ FOR AWS ONLY ‣ LESS DEPLOYMENT OPTIONS ‣ BETTER INFRASTRUCTURE EMULATION (API GATEWAY, LAMBDA API, FAKE EVENTS)
  • 24. SERVERLESS NODE.JS HELLO WORLD EXAMPLE exports.handler = async (event, context) => { return { statusCode: 200, body: 'hello world' }; }; INDEX.JS ‣EVENT • INPUT DATA FROM OTHER SOURCES ‣CONTEXT • REMAINING TIME • REQUEST ID • FUNCTION NAME • ETC.
  • 25. SERVERLESS NODE.JS service: hello-world provider: name: aws runtime: nodejs12.x stage: dev region: us-east-1 functions: api: handler: index.handler events: - http: ANY / - http: 'ANY {proxy+}' SERVERLESS.YML HELLO WORLD EXAMPLE ‣EVENTS FROM: • S3 • DYNAMODB • SIMPLE NOTIFICATION SERVICE • SIMPLE EMAIL SERVICE • CLOUDFORMATION • ALEXA
  • 27. SERVERLESS NODE.JS WHAT HAS JUST HAPPENED? FUNCTIONFIRST INVOCATION RESULT COLD START CONTAINER FUNCTIONSECOND INVOCATION RESULT CONTAINER EPHEMERAL CACHE
  • 29. SERVERLESS NODE.JS BABELSHEET ‣ TRANSLATIONS MANAGEMENT SYSTEM ‣ GOOGLE SPREADSHEET AS A USER INTERFACE ‣ GENERATES TRANSLATIONS IN VARIOUS FORMATS THROUGH CLI OR WEB SERVER ‣ AVAILABLE AT HTTPS://GITHUB.COM/ THESOFTWAREHOUSE/BABELSHEET-JS
  • 32. WHAT ARE THE STEPS TO MIGRATE APP?
  • 33. SERVERLESS NODE.JS THINGS TO START WITH ‣ MIGHT BE STATEFUL ‣ SUPPORTS LONG-RUNNING PROCESSES BEFORE FAAS ‣ MUST BE STATELESS ‣ NO LONG-RUNNING PROCESSES AFTER FAAS
  • 34. SERVERLESS NODE.JS MORE STEPS FOR MIGRATION ‣ USE ENVIRONMENT VARIABLES TO PROVIDE CONFIG ‣ MAKE STORAGE ABSTRACTION, INJECT PROPER STORAGE IMPLEMENTATION TO IOC CONTAINER ‣ WRITE FUNCTIONS HANDLERS (MORE OR LESS GRANULAR) ‣ PREPARE STACK PROVISIONING
  • 35. SERVERLESS NODE.JS API ENTRY POINT (BEFORE) import * as awilix from "awilix"; import * as dotenv from "dotenv"; import RedisStorage from "../shared/storage/redis"; import createContainer from "./container"; import Server from "./server/server"; dotenv.config(); const container = createContainer({ storage: awilix.asClass(RedisStorage) }); const server = container.resolve<Server>("server").getApp(); server.listen(container.resolve("port"));
  • 36. SERVERLESS NODE.JS import * as awilix from "awilix"; import * as dotenv from "dotenv"; import RedisStorage from "../shared/storage/redis"; import createContainer from "./container"; import Server from "./server/server"; dotenv.config(); const container = createContainer({ storage: awilix.asClass(RedisStorage) }); const server = container.resolve<Server>("server").getApp(); server.listen(container.resolve("port")); API ENTRY POINT (BEFORE)
  • 37. SERVERLESS NODE.JS import * as awilix from "awilix"; import * as dotenv from "dotenv"; import * as serverless from "serverless-http"; import DynamoDbStorage from "../shared/storage/dynamoDb"; import createContainer from "./container"; import Server from "./server/server"; dotenv.config(); const container = createContainer({ storage: awilix.asClass(DynamoDbStorage) }); const server = container.resolve<Server>("server").getApp(); export const handler = serverless(server); API FUNCTION HANDLER (AFTER)
  • 38. SERVERLESS NODE.JS API FUNCTION HANDLER (AFTER) import * as awilix from "awilix"; import * as dotenv from "dotenv"; import * as serverless from "serverless-http"; import DynamoDbStorage from "../shared/storage/dynamoDb"; import createContainer from "./container"; import Server from "./server/server"; dotenv.config(); const container = createContainer({ storage: awilix.asClass(DynamoDbStorage) }); const server = container.resolve<Server>("server").getApp(); export const handler = serverless(server);
  • 39. SERVERLESS NODE.JS PRODUCER MAIN LOGIC async function main() { const spreadsheetData = await container .resolve<GoogleSheets>("googleSheets") .fetchSpreadsheet(); const transformedData = await container .resolve<ITransformer>("transformer") .transform(spreadsheetData); container .resolve<TranslationsStorage>("translationsStorage") .setTranslations(transformedData); }
  • 40. SERVERLESS NODE.JS PRODUCER ENTRY POINT (BEFORE) import * as scheduler from "node-schedule"; scheduler.scheduleJob("* * * * *", () => { main(); });
  • 41. SERVERLESS NODE.JS PRODUCER FUNCTION HANDLER (AFTER) export const handler = async (event, context) => { try { await main(); } catch (error) { return { body: error.message || "Internal server error", statusCode: error.statusCode || 500 }; } return { body: JSON.stringify({ result: "ok" }), statusCode: 200 }; };
  • 42. SERVERLESS NODE.JS PROVISIONING CONFIG (PROVIDER) service: serverless-translations plugins: - serverless-plugin-typescript provider: name: aws runtime: nodejs12.x stage: dev region: us-east-1 environment: DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage} iamRoleStatements: - Effect: Allow Action: - dynamodb:Query - dynamodb:Scan - dynamodb:GetItem - dynamodb:PutItem - dynamodb:UpdateItem - dynamodb:DeleteItem Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"
  • 43. SERVERLESS NODE.JS PROVISIONING CONFIG (PROVIDER) service: serverless-translations plugins: - serverless-plugin-typescript provider: name: aws runtime: nodejs12.x stage: dev region: us-east-1 environment: DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage} iamRoleStatements: - Effect: Allow Action: - dynamodb:Query - dynamodb:Scan - dynamodb:GetItem - dynamodb:PutItem - dynamodb:UpdateItem - dynamodb:DeleteItem Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"
  • 44. SERVERLESS NODE.JS PROVISIONING CONFIG (PROVIDER) service: serverless-translations plugins: - serverless-plugin-typescript provider: name: aws runtime: nodejs12.x stage: dev region: us-east-1 environment: DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage} iamRoleStatements: - Effect: Allow Action: - dynamodb:Query - dynamodb:Scan - dynamodb:GetItem - dynamodb:PutItem - dynamodb:UpdateItem - dynamodb:DeleteItem Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"
  • 45. SERVERLESS NODE.JS PROVISIONING CONFIG (FUNCTIONS) functions: api: handler: src/api/serverless.handler events: - http: ANY / - http: "ANY {proxy+}" producer: handler: src/producer/serverless.handler environment: token: ${ssm:token~true} CLIENT_ID: ${ssm:CLIENT_ID~true} CLIENT_SECRET: ${ssm:CLIENT_SECRET~true} events: - schedule: rate(5 minutes)
  • 46. SERVERLESS NODE.JS PROVISIONING CONFIG (FUNCTIONS) functions: api: handler: src/api/serverless.handler events: - http: ANY / - http: "ANY {proxy+}" producer: handler: src/producer/serverless.handler environment: token: ${ssm:token~true} CLIENT_ID: ${ssm:CLIENT_ID~true} CLIENT_SECRET: ${ssm:CLIENT_SECRET~true} events: - schedule: rate(5 minutes)
  • 47. SERVERLESS NODE.JS PROVISIONING CONFIG (FUNCTIONS) functions: api: handler: src/api/serverless.handler events: - http: ANY / - http: "ANY {proxy+}" producer: handler: src/producer/serverless.handler environment: token: ${ssm:token~true} CLIENT_ID: ${ssm:CLIENT_ID~true} CLIENT_SECRET: ${ssm:CLIENT_SECRET~true} events: - schedule: rate(5 minutes)
  • 48. SERVERLESS NODE.JS PROVISIONING CONFIG (RESOURCES) resources: Resources: TranslationsDynamoDbTable: Type: "AWS::DynamoDB::Table" DeletionPolicy: Delete Properties: AttributeDefinitions: - AttributeName: id AttributeType: S KeySchema: - AttributeName: id KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 1 WriteCapacityUnits: 1 TableName: ${self:provider.environment.DYNAMODB_TABLE}
  • 49. SERVERLESS NODE.JS AWS CONSOLE PREVIEW AFTER DEPLOY
  • 52. SERVERLESS NODE.JS OPTIMIZATION STEPS ‣ HTTP CACHE ON API GATEWAY (REDUCE TIME, COST) ‣ LOWER MEMORY LIMIT ‣ USE EXECUTION CONTEXT FOR LOCAL CACHE ‣ USE FAST STORAGE SOLUTION, E.G. REDIS
  • 53. SERVERLESS NODE.JS SUMMARY ‣ CALCULATE IF IT IS FOR YOU, CONSIDER PRICING AND LIMITATIONS ‣ CHOOSE PROPER PROVIDER AND FRAMEWORK ‣ PREPARE YOUR APP FOR GOING SERVERLESS ‣ WRITE FUNCTION HANDLERS, PROVISIONING CONFIG ‣ DEPLOY, OPTIMIZE, REPEAT
  • 54. SERVERLESS NODE.JS WORTH KNOWING ‣ AWS STEP FUNCTIONS ‣ LAMBDA LAYERS ‣ BLUE/GREEN DEPLOYMENTS ‣ GRAPHQL ENDPOINTS ‣ GOOGLE CLOUD RUN (KNATIVE)
  • 55. THANK YOU! ICONS MADE BY ICON POND FROM WWW.FLATICON.COM 
  • 57. NEWSLETTER FOR DEVS AND TECH LEADERS HTTPS://TSH.IO/NEWSLETTER