SlideShare a Scribd company logo
1 of 94
Download to read offline
Let's take the monolith to the cloud šŸš€
Luciano Mammino ( )
@loige
loige.link/mono-lit
2022-03-01
1
@loige
Get the slides! šŸ‘‡
loige.link/mono-lit
2
I'm LucianoĀ šŸ‘‹
Senior Architect @ fourTheorem (Dublin )
nodejsdp.link
šŸ“”Co-Author of Node.js Design PatternsĀ  šŸ‘‰
Let's connect!
Ā  (blog)
Ā  (twitter)
Ā  (twitch)
Ā  (github)
loige.co
@loige
loige
lmammino
3
We are business focused
technologists that deliver.
Ā | Ā |
Accelerated Serverless AI as a Service Platform Modernisation
We are hiring
do you want to ?
work with us
loige 4
I co-host a podcast about AWS with !
@eoins
@loige
awsbites.com Pleaze, subscribe šŸ˜‡
5
@loige
Story time
6
@loige
Story time
7
@loige
Story time
8
@loige
Story time
9
Business Summary
@loige
SaaS CMS for legal practices
1 founder + 1 developer
šŸ’øBootstrapped business
šŸ™ŒGood MVP, getting attention in the market
šŸ’ŖStarted a TRIAL with a big customer
10
Current problems
@loige
šŸ“ˆThe company is growing
āš–but the technology does not scale!
šŸ“¦1 monolithic server
šŸ”„Frequent failures = šŸ¤¬unhappy customers
šŸ˜„The business is at risk!
11
Desired State
@loige
āš–More reliable & scalable infrastructure
šŸ‘ŒMinimal amount of change required*
* the team is not skilled with the cloud & containers, we need to keep cognitive load low
12
@loige
šŸ¤”
"I heard that the cloud is great but we don't
have the time and the skills to re-architect
everything as micro-services!"
13
šŸ§
What can we
recommend?
@loige
14
ā›
Let's start to
dig deeper!
@loige
15
Example use cases
@loige
A user logs in the application and they should be able to see
all their previously uploaded legal documents
A user can upload new documents and organize them by
providing speciļ¬c tags (client id, case number, etc.)
A user might search for documents containing speciļ¬c
keywords or tags
16
Current Architecture*
@loige
Virtual Private Server
* a beautiful monolith ā¤ 17
Can we take the monolith to
the cloud and make it resilient
& scalable?
@loige
18
Load Balancer
App Server(s)
File Storage Session Storage
Database
Target architecture
@loige
19
šŸ§
Let's get more specific...*
@loige
* Mostly AWS from here
20
S3 ElastiCache
RDS
Application Load Balancer
EC2 Instance(s)
Target architecture on AWS
@loige
21
āœ‹
Let's pause
for a second...
@loige
22
šŸ¤”
What is the cloud, really?
@loige
23
@loige
24
... a little more involved
than that! šŸ˜…
@loige
25
ā˜The "cloud" is built...
@loige
To scale
To be resilient
26
OK, but how?! šŸ˜’
@loige
27
Region
@loige
A physical location around the world (e.g. North
Virginia, IrelandĀ or Sydney)Ā  where AWS hosts a group
of data centers.
Ā 
Regions help to provision infrastructure that is closer
to the customers, so that our applications can have
low latency and feel responsive.
28
Availability Zone (AZ)
@loige
Discrete data center with redundant power,
networking, and connectivity in an AWS Region.
Ā 
Data centers in diļ¬€erent availability zones are
disjointed from one another, so if thereā€™s a serious
outage, thatā€™s rarely aļ¬€ecting more than one
availability zone at the same time.
29
Availability Zone (AZ)
@loige
Itā€™s good practice to spread redundant infrastructure
across diļ¬€erent availability zones in a given region to
guarantee high availability.
30
VPC
@loige
A virtual (private) network provisioned in a given
region for a given AWS account.
Ā 
It is logically isolated from other virtual networks in
AWS.
Ā 
Every VPC has a range of private IP addresses
organised in one or more subnets.
31
Subnet
@loige
A range of IPs in a given VPC and in a given availability
zone that can be used to spin up and connect
resources within the network.
Ā 
Subnets can be public or private.
Ā 
A public subnet can be used to run instances that can
have a public IP assigned to them and can be
reachable from outside the VPC itself.
32
Subnet
@loige
Itā€™s good practice to keep front-facing servers (or load
balancers) in public subnets and keep everything else
(backend services, databases, etc.) in private subnets.
Ā 
Traļ¬ƒc between subnets can be enabled through
routing tables to allow for instance a load balancer in a
public subnet to forward traļ¬ƒc to backend instances
in a private subnet.
33
Quick Recap
@loige
Region: physical location with data centers
Availability Zone: data center in a region
VPC: a virtual private network in a region
Subnet: range of IPs in a VPC in a given AZ
Ā 
34
@loige
Region
AZ1 AZ2 AZ3
VPC
Subnet
Resource
(e.g. EC2 instance)
35
āœTODO List
@loige
ā˜ Create an AWS account
ā˜ Select a region
ā˜ Create and conļ¬gure a VPC
36
Our VPC
@loige
37
ā˜‘ Create an AWS account
ā˜‘ Select a region
ā˜‘ Create and conļ¬gure a VPC
āœTODO List
@loige
38
āœTODO List
@loige
ā˜ Load Balancer
ā˜ EC2
ā˜ S3
ā˜ RDS
ā˜ ElastiCache
ā˜ Route 53
39
Application Load Balancer (ALB)
@loige
The entry point to all the application traļ¬ƒc.
Ā 
Layer 7 Load Balancer (HTTP, HTTPS, WebSocket,
gRPC).
Ā 
Highly available: replicated in all our public
subnets.
40
Application Load Balancer (ALB)
@loige
Scalable: can handle millions of request per
second.
Ā 
Managed service: we don't need to conļ¬gure the
OS or install software patches.
Ā 
Can be integrated with ACM (AWS Certiļ¬cate
Manager) to support HTTPS.
41
Application Load Balancer (ALB)
@loige
Target group 42
Application Load Balancer (ALB)
@loige
Target group
šŸ”„
/health
āœ…
āŒ
/health
/health
āœ…
Unhealty targets
won't get any traļ¬ƒc
43
Application Load Balancer (ALB)
@loige
Targets can be added dynamically.
Ā 
We can scale targets automatically using
autoscaling groups.
Ā 
E.g. Add or remove instances based on num
requests in-ļ¬‚ight or on avg CPU of the current
instances.
44
How does it scale?
@loige
Being a managed service, scalability is mostly
handled out of the box by AWS.
45
Resiliency
@loige
A load balancer can distribute traļ¬ƒc to multiple
AZs, so if one of them becomes unavailable it will
keep distributing traļ¬ƒc to the remaining ones.Ā 
46
āœTODO List
@loige
ā˜‘ Load Balancer
ā˜ EC2
ā˜ S3
ā˜ RDS
ā˜ ElastiCache
ā˜ Route 53
47
EC2 - Virtual Machine
@loige
Virtual machine running all the necessary
software for the service (Nginx, Node.js, app code,
etc.)
Ā 
They need to use Security Groups (allow traļ¬ƒc)
and IAM Roles (allow them to access other AWS
resources like S3).
48
EC2 - Virtual Machine
@loige
We will need to provision multiple machines
dynamically.
Challenges:
Consistency
šŸ®Cattle vs šŸ™€Pet mindset
Stateless applications
49
Consistency
@loige
All our virtual machines have to be the same: we
need to build an AMI (Amazon Machine Image).
Ā 
An AMI contains OS, libraries, software and source
code.
Ā 
You can use an AMI to start a new instance.
50
Consistency
@loige
While we can build an AMI manually, it's better to
use tools to automate the work:
Hashicorp Packer
EC2 Image Builder
51
šŸ®Cattle vs šŸ™€Pet mindset
@loige
Once an instance has been launched we shouldn't
change it anymore (e.g update the OS, install new
softare, update the code, etc.)
Ā 
If we need to change something, we build a new
image and deploy new instances.
Ā 
Instances are disposable!
52
Stateless
@loige
We are load balancing traļ¬ƒc so a user might be
served by diļ¬€erent instances during their session.
Ā 
A single instance should not store any state (e.g.
user sessions, uploaded ļ¬les, etc.)
Ā 
State should be stored outside instances
(ElastiCache, S3, RDS, etc).
53
Stateless
@loige
Making an application stateless might require a
good amount of code change.
Ā 
A shortcut to this might be to enable
in the ALB, but it's not recommended for
scalability and resiliency.Ā 
sticky
sessions
54
How does it scale?
@loige
Every instance will be able to handle a certain
number of requests per second.
Ā 
We can scale by adding more instances when the
traļ¬ƒc grows.
55
Resiliency
@loige
We should have at least 1 instance per
availability zone.
Ā 
If there is an AWS outage, the instances on the
healthy availability zone will keep handling
requests.
Ā 
We can use an autoscaling group to make sure
that unhealthy instances are replaced.
56
āœTODO List
@loige
ā˜‘ Load Balancer
ā˜‘ EC2
ā˜ S3
ā˜ RDS
ā˜ ElastiCache
ā˜ Route 53
57
Simple Storage Service (S3)
@loige
One of the very ļ¬rst AWS services and (probably)
the most famous one.
Ā 
Object storage service: Allows you to store any
amount of data durably.
Ā 
You need to use the SDK to read and write data.
58
Simple Storage Service (S3)
@loige
Data can be organised in logical containers called
Buckets.
Ā 
Key/value model: Inside a bucket you can store
data by providing a key and the content.
59
Simple Storage Service (S3)
@loige
const AWS = require('aws-sdk')
const s3 = new AWS.S3()
const params = {
Bucket: 'my-bucket',
Key: 'my-first-s3-file.txt',
Body: Buffer.from('Hello, AWS')
}
s3.upload(params, (err) => {
if (err) {
console.error(err)
} else {
console.log('Upload successful')
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const AWS = require('aws-sdk')
1
2
const s3 = new AWS.S3()
3
4
const params = {
5
Bucket: 'my-bucket',
6
Key: 'my-first-s3-file.txt',
7
Body: Buffer.from('Hello, AWS')
8
}
9
10
s3.upload(params, (err) => {
11
if (err) {
12
console.error(err)
13
} else {
14
console.log('Upload successful')
15
}
16
})
17
const s3 = new AWS.S3()
const AWS = require('aws-sdk')
1
2
3
4
const params = {
5
Bucket: 'my-bucket',
6
Key: 'my-first-s3-file.txt',
7
Body: Buffer.from('Hello, AWS')
8
}
9
10
s3.upload(params, (err) => {
11
if (err) {
12
console.error(err)
13
} else {
14
console.log('Upload successful')
15
}
16
})
17
const params = {
Bucket: 'my-bucket',
Key: 'my-first-s3-file.txt',
Body: Buffer.from('Hello, AWS')
}
const AWS = require('aws-sdk')
1
2
const s3 = new AWS.S3()
3
4
5
6
7
8
9
10
s3.upload(params, (err) => {
11
if (err) {
12
console.error(err)
13
} else {
14
console.log('Upload successful')
15
}
16
})
17
s3.upload(params, (err) => {
if (err) {
console.error(err)
} else {
console.log('Upload successful')
}
})
const AWS = require('aws-sdk')
1
2
const s3 = new AWS.S3()
3
4
const params = {
5
Bucket: 'my-bucket',
6
Key: 'my-first-s3-file.txt',
7
Body: Buffer.from('Hello, AWS')
8
}
9
10
11
12
13
14
15
16
17
const AWS = require('aws-sdk')
const s3 = new AWS.S3()
const params = {
Bucket: 'my-bucket',
Key: 'my-first-s3-file.txt',
Body: Buffer.from('Hello, AWS')
}
s3.upload(params, (err) => {
if (err) {
console.error(err)
} else {
console.log('Upload successful')
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
60
Simple Storage Service (S3)
@loige
Too much code to change?
A ļ¬rst migration could be done by using a
something like Ā to create a "virtual
ļ¬lesystem" that allows you to read/write to S3
seamlessly.
s3fs-fuse
61
How does it scale?
@loige
S3 is a managed service which automatically
scales to thousands of read/write operations per
second.
62
Resiliency
@loige
S3 is provisioned in multiple AZs by default and it
makes multiple copies of your data.
Ā 
All of this happens transparently, no special
conļ¬guration required.
63
āœTODO List
@loige
ā˜‘ Load Balancer
ā˜‘ EC2
ā˜‘ S3
ā˜ RDS
ā˜ ElastiCache
ā˜ Route 53
64
Relational Database Service (RDS)
@loige
Managed relational database service for MySql,
PostgreSQL, MariaDB, Oracle & SQL Server.
Ā 
Being a managed service, AWS takes care of most
common concerns like backups and updates
(conļ¬gurable).
65
How does it scale?
@loige
RDS PostgreSQL supports Read Replicas: you can
provision additional instances to which you can
distribute heavy read-only queries.
Ā 
Ā 
66
Resiliency
@loige
RDS PostgreSQL can be conļ¬gured to work in
Multi-AZ mode: this means that there will be one
or two standby copies of the database in diļ¬€erent
AZs.
Ā 
If the primary DB instance or the primary AZ have
an outage, one of the standby copies are
promoted to become "the primary" instance.
Ā 
67
Resiliency
@loige
Failover is fast but not instantaneous (60-120
seconds), so we need to make sure to plan for
possible connectivity failures in your app and
show clear error messages to the users.
68
āœTODO List
@loige
ā˜‘ Load Balancer
ā˜‘ EC2
ā˜‘ S3
ā˜‘ RDS
ā˜ ElastiCache
ā˜ Route 53
69
ElastiCache
@loige
Managed in-memory caching service supporting
Redis and Memcached.
Ā 
Meant to be used for use cases that don't require
durability like data cache, session stores, gaming
leaderboards, streaming, and analytics.
Ā 
AWS takes care of maintenance.
70
How does it scale?
@loige
A single instance of Redis (with enough memory)
can scale to signiļ¬cant amounts of traļ¬ƒc.
Ā 
If you need more, you can run ElastiCache Redis in
Cluster Mode and shard your data across
multiple Redis instances.
71
Resiliency
@loige
ElastiCache Redis can operate in Multi-AZ mode.
Ā 
Similarly to RDS, in case of failures, there might be
some downtime while the new master is
promoted.
Ā 
We need to make sure the app accounts for Redis
connection failures.
72
āœTODO List
@loige
ā˜‘ Load Balancer
ā˜‘ EC2
ā˜‘ S3
ā˜‘ RDS
ā˜‘ ElastiCache
ā˜ Route 53
73
Route53
@loige
Highly available and scalable cloud DNS service.
Ā 
Can be used to direct traļ¬ƒc on a given domain to
our Application Load Balancer.
74
āœTODO List
@loige
ā˜‘ Load Balancer
ā˜‘ EC2
ā˜‘ S3
ā˜‘ RDS
ā˜‘ ElastiCache
ā˜‘ Route 53
75
Infrastructure as Code (IaaC)
@loige
We could provision everything "manually" from
the web console, but...
Ā 
It will be hard to create consistent
environments for development and QA
It will be hard to change things incrementally
How would we test and review changes before
applying them in production?
76
Infrastructure as Code (IaaC)
@loige
It's better to deļ¬ne all the infrastructure using code.
There are several tools that can help us with that:
CloudFormation
Hashicorp Terraform
Cloud Development Kit (CDK)
Pulumi
77
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "AWS CloudFormation Sample Template EC2InstanceWithSecurityGroupSample: Create an Amazon EC2 instance running the A
"Parameters" : {
"KeyName": {
"Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance",
"Type": "AWS::EC2::KeyPair::KeyName",
"ConstraintDescription" : "must be the name of an existing EC2 KeyPair."
},
"InstanceType" : {
"Description" : "WebServer EC2 instance type",
"Type" : "String",
"Default" : "t2.small",
"AllowedValues" : [ "t1.micro", "t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "m1.small", "m1.medium", "m1.large"
,
"ConstraintDescription" : "must be a valid EC2 instance type."
},
"SSHLocation" : {
"Description" : "The IP address range that can be used to SSH to the EC2 instances",
"Type": "String",
"MinLength": "9",
"MaxLength": "18",
"Default": "0.0.0.0/0",
"AllowedPattern": "(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})/(d{1,2})",
"ConstraintDescription": "must be a valid IP CIDR range of the form x.x.x.x/x."
}
},
"Mappings" : {
"AWSInstanceType2Arch" : {
"t1.micro" : { "Arch" : "HVM64" },
"t2.nano" : { "Arch" : "HVM64" },
"t2.micro" : { "Arch" : "HVM64" },
@loige
Example of CloudFormation template
78
import * as cdk from '@aws-cdk/core'
import * as ec2 from '@aws-cdk/aws-ec2'
export class CdkUbuntuEc2Stack extends cdk.Stack {
constructor (scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, {
env: {
account: process.env.CDK_DEPLOY_ACCOUNT || process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEPLOY_REGION || process.env.CDK_DEFAULT_REGION
},
...props
})
const defaultVpc = ec2.Vpc.fromLookup(this, 'VPC', {
isDefault: true
})
const userData = ec2.UserData.forLinux()
userData.addCommands(
'apt-get update -y',
'apt-get install -y git awscli ec2-instance-connect',
'until git clone https://github.com/aws-quickstart/quickstart-linux-utilities.git; do echo "Retrying"; done',
'cd /quickstart-linux-utilities',
'source quickstart-cfn-tools.source',
'qs_update-os || qs_err',
'qs_bootstrap_pip || qs_err',
'qs_aws-cfn-bootstrap || qs_err',
'mkdir -p /opt/aws/bin',
'ln -s /usr/local/bin/cfn-* /opt/aws/bin/'
)
const machineImage = ec2.MachineImage.fromSSMParameter(
'/aws/service/canonical/ubuntu/server/focal/stable/current/amd64/hvm/ebs-gp2/ami-id',
ec2.OperatingSystemType.LINUX,
userData
)
const myVmSecurityGroup = new ec2.SecurityGroup(this, 'myVmSecurityGroup', {
@loige
Example of a CDK stack (TypeScript)
79
An article about CDK (with examples)
@loige
loige.link/cdk-article
80
Switch over
@loige
81
Switch over
@loige
šŸ™€How do we migrate the data?
Ā 
šŸ˜„How do we switch the traļ¬ƒc to the new infrastructure?
82
Streamlined data migration
@loige
Update the "old" code-base to save every
new ļ¬le also to S3.
Ā 
Copy all the existing ļ¬le to the S3 bucket
(S3 sync).
83
Streamlined data migration
@loige
AWS Database Migration service allows
you to replicate all the data from the old
database to the new one.
Ā 
It will also keep the 2 Databases in sync
during the switch over!
84
Switching traffic
@loige
Request a new certiļ¬cate using AWS
Certiļ¬cate Manager (ACM).
Ā 
Can be validated by email or DNS.
Ā 
Point your DNS to the new Load Balancer
in AWS!
85
WE ARE LIVE! šŸŽ‰
@loige
Now what?
86
New challenges šŸ¤Ø
@loige
Observability
Testing
Building & Deployment
87
New opportunities šŸ˜Š
@loige
We can scale dynamically!
As the team grows and the system gets more
complicated we can start to think about micro-
services.
We can start to play with other AWS services (E.g.
SQS + Lambda for background task processing).
88
šŸ’øCost
@loige
89
šŸ’øCost
@loige
calculator.aws/#/estimate?id=1e0779adb67305166c01a583f5d7f61f7c92b029
Load Balancer $ 24.24
EC2 (6 instances) $ 85.87
ElastiCache Redis (3 instances) $ 78.84
RDS PostgreSQL (3 instances) $ 155.48
S3 (1TB) $ 32.55
TOT $ 376.98
90
šŸ’øCost
@loige
Cost estimates are always a bit of a "gamble"...
I selected some arbitrary instance sizes (EC2, RDS, ElastiCache).
I am not accounting for auto-scaling.
I am not accounting for network traļ¬ƒc.
Better to look at cost in production and try to optimise when
needed.
Rule of thumb: try to balance cost with your revenue.
Rule of thumb (2): consider the !
total cost of ownership
91
ā˜ Create an AWS Account
ā˜ Select a tool for IaaC
ā˜ Create and conļ¬gure a VPC in a region (3 AZs, Public /
Private subnets)
ā˜ Create an S3 bucket
ā˜ Update the old codebase to save every new ļ¬le to S3
ā˜ Copy all the existing ļ¬les to S3
ā˜ Spin up the database in RDS (Multi-AZ)
ā˜ Migrate the data using Database Migration Service
ā˜ Provision the ElastiCache Redis Cluster (Multi-AZ)
āœBonus: a TODO list for the migration
@loige
ā˜ Create an AMI for the application
ā˜ Create a security groups and an IAM policy for EC2
ā˜ Make the application stateless
ā˜ Create an health check endpoint
ā˜ Create an autoscaling group to spin up the instances
ā˜ Create a certiļ¬cate in ACM
ā˜ Provision an Application Load Balancer (public subnets)
ā˜ Conļ¬gure Https, Targets and Health Checks
ā˜ Conļ¬gure Route53
ā˜ Traļ¬ƒc switch-over through DNS šŸ¤ž
šŸ“ Great guide to cloud migrations: 6 strategies for migrating applications to the cloud 92
The cloud is a journey
not a destination
The cloud is a journey
not a destination
@loige
93
ā˜nodejsdp.link
Thank you!
Special thanks to:
, Ā ā¤
Photos by
@micktwomey @eoins
Unsplash
@loige
loige.link/mono-lit
94

More Related Content

What's hot

Openstack - An introduction/Installation - Presented at Dr Dobb's conference...
 Openstack - An introduction/Installation - Presented at Dr Dobb's conference... Openstack - An introduction/Installation - Presented at Dr Dobb's conference...
Openstack - An introduction/Installation - Presented at Dr Dobb's conference...Rahul Krishna Upadhyaya
Ā 
OpenStack architecture and services
OpenStack architecture and servicesOpenStack architecture and services
OpenStack architecture and servicesvinoth kumar selvaraj
Ā 
OpenStack Super Bootcamp.pdf
OpenStack Super Bootcamp.pdfOpenStack Super Bootcamp.pdf
OpenStack Super Bootcamp.pdfOpenStack Foundation
Ā 
Webinar "Introduction to OpenStack"
Webinar "Introduction to OpenStack"Webinar "Introduction to OpenStack"
Webinar "Introduction to OpenStack"CREATE-NET
Ā 
OpenStack 101 update
OpenStack 101 updateOpenStack 101 update
OpenStack 101 updateKamesh Pemmaraju
Ā 
Building hybrid cloud with cloudify (public)
Building hybrid cloud with cloudify (public)Building hybrid cloud with cloudify (public)
Building hybrid cloud with cloudify (public)Nati Shalom
Ā 
Openstack Installation (ver. liberty)
Openstack Installation (ver. liberty)Openstack Installation (ver. liberty)
Openstack Installation (ver. liberty)Eggy Cheng
Ā 
AWS-compared-to-OpenStack
AWS-compared-to-OpenStackAWS-compared-to-OpenStack
AWS-compared-to-OpenStackJonathan Gershater
Ā 
Openstack Fundamentals by CloudZone @Back2School
Openstack Fundamentals by CloudZone @Back2SchoolOpenstack Fundamentals by CloudZone @Back2School
Openstack Fundamentals by CloudZone @Back2SchoolAsaf Abres
Ā 
Introduction to OpenStack Storage
Introduction to OpenStack StorageIntroduction to OpenStack Storage
Introduction to OpenStack StorageNetApp
Ā 
VNG/IRD - Cloud computing & Openstack discussion 3/5/2014
VNG/IRD - Cloud computing & Openstack discussion 3/5/2014VNG/IRD - Cloud computing & Openstack discussion 3/5/2014
VNG/IRD - Cloud computing & Openstack discussion 3/5/2014Tran Nhan
Ā 
Introduction Openstack
Introduction OpenstackIntroduction Openstack
Introduction OpenstackRanjith Kumar
Ā 
Designing OpenStack Architectures
Designing OpenStack ArchitecturesDesigning OpenStack Architectures
Designing OpenStack ArchitecturesMirantis
Ā 
OpenStack Architecture and Use Cases
OpenStack Architecture and Use CasesOpenStack Architecture and Use Cases
OpenStack Architecture and Use CasesJalal Mostafa
Ā 
Extend your Datacentre with the AWS Cloud
Extend your Datacentre with the AWS CloudExtend your Datacentre with the AWS Cloud
Extend your Datacentre with the AWS CloudAmazon Web Services
Ā 
OpenStack 101 Presentation
OpenStack 101 PresentationOpenStack 101 Presentation
OpenStack 101 PresentationEVault
Ā 
Heat - keep the clouds up
Heat - keep the clouds upHeat - keep the clouds up
Heat - keep the clouds upKiran Murari
Ā 

What's hot (20)

Openstack - An introduction/Installation - Presented at Dr Dobb's conference...
 Openstack - An introduction/Installation - Presented at Dr Dobb's conference... Openstack - An introduction/Installation - Presented at Dr Dobb's conference...
Openstack - An introduction/Installation - Presented at Dr Dobb's conference...
Ā 
OpenStack Report
OpenStack ReportOpenStack Report
OpenStack Report
Ā 
OpenStack architecture and services
OpenStack architecture and servicesOpenStack architecture and services
OpenStack architecture and services
Ā 
OpenStack Super Bootcamp.pdf
OpenStack Super Bootcamp.pdfOpenStack Super Bootcamp.pdf
OpenStack Super Bootcamp.pdf
Ā 
Webinar "Introduction to OpenStack"
Webinar "Introduction to OpenStack"Webinar "Introduction to OpenStack"
Webinar "Introduction to OpenStack"
Ā 
OpenStack 101 update
OpenStack 101 updateOpenStack 101 update
OpenStack 101 update
Ā 
Building hybrid cloud with cloudify (public)
Building hybrid cloud with cloudify (public)Building hybrid cloud with cloudify (public)
Building hybrid cloud with cloudify (public)
Ā 
OpenStack basics
OpenStack basicsOpenStack basics
OpenStack basics
Ā 
Openstack Installation (ver. liberty)
Openstack Installation (ver. liberty)Openstack Installation (ver. liberty)
Openstack Installation (ver. liberty)
Ā 
AWS-compared-to-OpenStack
AWS-compared-to-OpenStackAWS-compared-to-OpenStack
AWS-compared-to-OpenStack
Ā 
Openstack Fundamentals by CloudZone @Back2School
Openstack Fundamentals by CloudZone @Back2SchoolOpenstack Fundamentals by CloudZone @Back2School
Openstack Fundamentals by CloudZone @Back2School
Ā 
Open stack
Open stackOpen stack
Open stack
Ā 
Introduction to OpenStack Storage
Introduction to OpenStack StorageIntroduction to OpenStack Storage
Introduction to OpenStack Storage
Ā 
VNG/IRD - Cloud computing & Openstack discussion 3/5/2014
VNG/IRD - Cloud computing & Openstack discussion 3/5/2014VNG/IRD - Cloud computing & Openstack discussion 3/5/2014
VNG/IRD - Cloud computing & Openstack discussion 3/5/2014
Ā 
Introduction Openstack
Introduction OpenstackIntroduction Openstack
Introduction Openstack
Ā 
Designing OpenStack Architectures
Designing OpenStack ArchitecturesDesigning OpenStack Architectures
Designing OpenStack Architectures
Ā 
OpenStack Architecture and Use Cases
OpenStack Architecture and Use CasesOpenStack Architecture and Use Cases
OpenStack Architecture and Use Cases
Ā 
Extend your Datacentre with the AWS Cloud
Extend your Datacentre with the AWS CloudExtend your Datacentre with the AWS Cloud
Extend your Datacentre with the AWS Cloud
Ā 
OpenStack 101 Presentation
OpenStack 101 PresentationOpenStack 101 Presentation
OpenStack 101 Presentation
Ā 
Heat - keep the clouds up
Heat - keep the clouds upHeat - keep the clouds up
Heat - keep the clouds up
Ā 

Similar to Let's take the monolith to the cloud šŸš€

Convergence of Containers and Serverless by Mency Woo
Convergence of Containers and Serverless by Mency WooConvergence of Containers and Serverless by Mency Woo
Convergence of Containers and Serverless by Mency WooTriNimbus
Ā 
AWS Serverless Community Day Keynote and Vendia Launch 6-26-2020
AWS Serverless Community Day Keynote and Vendia Launch 6-26-2020AWS Serverless Community Day Keynote and Vendia Launch 6-26-2020
AWS Serverless Community Day Keynote and Vendia Launch 6-26-2020Tim Wagner
Ā 
re:Invent 2018 re:Cap for Toronto AWS User Group
re:Invent 2018 re:Cap for Toronto AWS User Groupre:Invent 2018 re:Cap for Toronto AWS User Group
re:Invent 2018 re:Cap for Toronto AWS User GroupDaniel Zivkovic
Ā 
Cloud comparison - AWS vs Azure vs Google
Cloud comparison - AWS vs Azure vs GoogleCloud comparison - AWS vs Azure vs Google
Cloud comparison - AWS vs Azure vs GooglePatrick Pierson
Ā 
Self-Service Supercomputing
Self-Service SupercomputingSelf-Service Supercomputing
Self-Service SupercomputingAmazon Web Services
Ā 
002 AWSSlides.pdf
002 AWSSlides.pdf002 AWSSlides.pdf
002 AWSSlides.pdfDrBashirMSaad
Ā 
Integrating with Aws s3
Integrating with Aws s3Integrating with Aws s3
Integrating with Aws s3NeerajKumar1965
Ā 
Aws Architecture Fundamentals
Aws Architecture FundamentalsAws Architecture Fundamentals
Aws Architecture Fundamentals2nd Watch
Ā 
Building a Database for the Future with MongoDB Atlas
Building a Database for the Future with MongoDB AtlasBuilding a Database for the Future with MongoDB Atlas
Building a Database for the Future with MongoDB AtlasAmazon Web Services
Ā 
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, Smile
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, SmileOCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, Smile
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, SmileOCCIware
Ā 
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017Marc Dutoo
Ā 
AWS Interview Questions and Answers.pdf
AWS Interview Questions and Answers.pdfAWS Interview Questions and Answers.pdf
AWS Interview Questions and Answers.pdfnishajeni1
Ā 
AWS Interview Questions and Answers_2023.pdf
AWS Interview Questions and Answers_2023.pdfAWS Interview Questions and Answers_2023.pdf
AWS Interview Questions and Answers_2023.pdfnishajeni1
Ā 
Ultimate Guide to Incident Response in AWS.pdf
Ultimate Guide to Incident Response in AWS.pdfUltimate Guide to Incident Response in AWS.pdf
Ultimate Guide to Incident Response in AWS.pdfChristopher Doman
Ā 
AWS Architecture Fundamentals - Houston
AWS Architecture Fundamentals - HoustonAWS Architecture Fundamentals - Houston
AWS Architecture Fundamentals - HoustonNicole Maus
Ā 
AWS in Practice
AWS in PracticeAWS in Practice
AWS in PracticeAnna Ruokonen
Ā 
Cloud On-Ramp Project Briefing
Cloud On-Ramp Project BriefingCloud On-Ramp Project Briefing
Cloud On-Ramp Project BriefingRobert McDermott
Ā 
AWS Observability Made Simple
AWS Observability Made SimpleAWS Observability Made Simple
AWS Observability Made SimpleLuciano Mammino
Ā 
Deep dive into cloud security - Jaimin Gohel & Virendra Rathore
Deep dive into cloud security - Jaimin Gohel & Virendra RathoreDeep dive into cloud security - Jaimin Gohel & Virendra Rathore
Deep dive into cloud security - Jaimin Gohel & Virendra RathoreNSConclave
Ā 
Reinvent recap
Reinvent recapReinvent recap
Reinvent recapJason Poley
Ā 

Similar to Let's take the monolith to the cloud šŸš€ (20)

Convergence of Containers and Serverless by Mency Woo
Convergence of Containers and Serverless by Mency WooConvergence of Containers and Serverless by Mency Woo
Convergence of Containers and Serverless by Mency Woo
Ā 
AWS Serverless Community Day Keynote and Vendia Launch 6-26-2020
AWS Serverless Community Day Keynote and Vendia Launch 6-26-2020AWS Serverless Community Day Keynote and Vendia Launch 6-26-2020
AWS Serverless Community Day Keynote and Vendia Launch 6-26-2020
Ā 
re:Invent 2018 re:Cap for Toronto AWS User Group
re:Invent 2018 re:Cap for Toronto AWS User Groupre:Invent 2018 re:Cap for Toronto AWS User Group
re:Invent 2018 re:Cap for Toronto AWS User Group
Ā 
Cloud comparison - AWS vs Azure vs Google
Cloud comparison - AWS vs Azure vs GoogleCloud comparison - AWS vs Azure vs Google
Cloud comparison - AWS vs Azure vs Google
Ā 
Self-Service Supercomputing
Self-Service SupercomputingSelf-Service Supercomputing
Self-Service Supercomputing
Ā 
002 AWSSlides.pdf
002 AWSSlides.pdf002 AWSSlides.pdf
002 AWSSlides.pdf
Ā 
Integrating with Aws s3
Integrating with Aws s3Integrating with Aws s3
Integrating with Aws s3
Ā 
Aws Architecture Fundamentals
Aws Architecture FundamentalsAws Architecture Fundamentals
Aws Architecture Fundamentals
Ā 
Building a Database for the Future with MongoDB Atlas
Building a Database for the Future with MongoDB AtlasBuilding a Database for the Future with MongoDB Atlas
Building a Database for the Future with MongoDB Atlas
Ā 
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, Smile
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, SmileOCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, Smile
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, Smile
Ā 
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017
Ā 
AWS Interview Questions and Answers.pdf
AWS Interview Questions and Answers.pdfAWS Interview Questions and Answers.pdf
AWS Interview Questions and Answers.pdf
Ā 
AWS Interview Questions and Answers_2023.pdf
AWS Interview Questions and Answers_2023.pdfAWS Interview Questions and Answers_2023.pdf
AWS Interview Questions and Answers_2023.pdf
Ā 
Ultimate Guide to Incident Response in AWS.pdf
Ultimate Guide to Incident Response in AWS.pdfUltimate Guide to Incident Response in AWS.pdf
Ultimate Guide to Incident Response in AWS.pdf
Ā 
AWS Architecture Fundamentals - Houston
AWS Architecture Fundamentals - HoustonAWS Architecture Fundamentals - Houston
AWS Architecture Fundamentals - Houston
Ā 
AWS in Practice
AWS in PracticeAWS in Practice
AWS in Practice
Ā 
Cloud On-Ramp Project Briefing
Cloud On-Ramp Project BriefingCloud On-Ramp Project Briefing
Cloud On-Ramp Project Briefing
Ā 
AWS Observability Made Simple
AWS Observability Made SimpleAWS Observability Made Simple
AWS Observability Made Simple
Ā 
Deep dive into cloud security - Jaimin Gohel & Virendra Rathore
Deep dive into cloud security - Jaimin Gohel & Virendra RathoreDeep dive into cloud security - Jaimin Gohel & Virendra Rathore
Deep dive into cloud security - Jaimin Gohel & Virendra Rathore
Ā 
Reinvent recap
Reinvent recapReinvent recap
Reinvent recap
Ā 

More from Luciano Mammino

Did you know JavaScript has iterators? DublinJS
Did you know JavaScript has iterators? DublinJSDid you know JavaScript has iterators? DublinJS
Did you know JavaScript has iterators? DublinJSLuciano Mammino
Ā 
What I learned by solving 50 Advent of Code challenges in Rust - RustNation U...
What I learned by solving 50 Advent of Code challenges in Rust - RustNation U...What I learned by solving 50 Advent of Code challenges in Rust - RustNation U...
What I learned by solving 50 Advent of Code challenges in Rust - RustNation U...Luciano Mammino
Ā 
Building an invite-only microsite with Next.js & Airtable - ReactJS Milano
Building an invite-only microsite with Next.js & Airtable - ReactJS MilanoBuilding an invite-only microsite with Next.js & Airtable - ReactJS Milano
Building an invite-only microsite with Next.js & Airtable - ReactJS MilanoLuciano Mammino
Ā 
From Node.js to Design Patterns - BuildPiper
From Node.js to Design Patterns - BuildPiperFrom Node.js to Design Patterns - BuildPiper
From Node.js to Design Patterns - BuildPiperLuciano Mammino
Ā 
Let's build a 0-cost invite-only website with Next.js and Airtable!
Let's build a 0-cost invite-only website with Next.js and Airtable!Let's build a 0-cost invite-only website with Next.js and Airtable!
Let's build a 0-cost invite-only website with Next.js and Airtable!Luciano Mammino
Ā 
Everything I know about S3 pre-signed URLs
Everything I know about S3 pre-signed URLsEverything I know about S3 pre-signed URLs
Everything I know about S3 pre-signed URLsLuciano Mammino
Ā 
Serverless for High Performance Computing
Serverless for High Performance ComputingServerless for High Performance Computing
Serverless for High Performance ComputingLuciano Mammino
Ā 
Serverless for High Performance Computing
Serverless for High Performance ComputingServerless for High Performance Computing
Serverless for High Performance ComputingLuciano Mammino
Ā 
JavaScript Iteration Protocols - Workshop NodeConf EU 2022
JavaScript Iteration Protocols - Workshop NodeConf EU 2022JavaScript Iteration Protocols - Workshop NodeConf EU 2022
JavaScript Iteration Protocols - Workshop NodeConf EU 2022Luciano Mammino
Ā 
Building an invite-only microsite with Next.js & Airtable
Building an invite-only microsite with Next.js & AirtableBuilding an invite-only microsite with Next.js & Airtable
Building an invite-only microsite with Next.js & AirtableLuciano Mammino
Ā 
A look inside the European Covid Green Certificate - Rust Dublin
A look inside the European Covid Green Certificate - Rust DublinA look inside the European Covid Green Certificate - Rust Dublin
A look inside the European Covid Green Certificate - Rust DublinLuciano Mammino
Ā 
Node.js: scalability tips - Azure Dev Community Vijayawada
Node.js: scalability tips - Azure Dev Community VijayawadaNode.js: scalability tips - Azure Dev Community Vijayawada
Node.js: scalability tips - Azure Dev Community VijayawadaLuciano Mammino
Ā 
A look inside the European Covid Green Certificate (Codemotion 2021)
A look inside the European Covid Green Certificate (Codemotion 2021)A look inside the European Covid Green Certificate (Codemotion 2021)
A look inside the European Covid Green Certificate (Codemotion 2021)Luciano Mammino
Ā 
Semplificare l'observability per progetti Serverless
Semplificare l'observability per progetti ServerlessSemplificare l'observability per progetti Serverless
Semplificare l'observability per progetti ServerlessLuciano Mammino
Ā 
Finding a lost song with Node.js and async iterators - NodeConf Remote 2021
Finding a lost song with Node.js and async iterators - NodeConf Remote 2021Finding a lost song with Node.js and async iterators - NodeConf Remote 2021
Finding a lost song with Node.js and async iterators - NodeConf Remote 2021Luciano Mammino
Ā 
Finding a lost song with Node.js and async iterators - EnterJS 2021
Finding a lost song with Node.js and async iterators - EnterJS 2021Finding a lost song with Node.js and async iterators - EnterJS 2021
Finding a lost song with Node.js and async iterators - EnterJS 2021Luciano Mammino
Ā 
How to send gzipped requests with boto3
How to send gzipped requests with boto3How to send gzipped requests with boto3
How to send gzipped requests with boto3Luciano Mammino
Ā 
Finding a lost song with Node.js and async iterators
Finding a lost song with Node.js and async iteratorsFinding a lost song with Node.js and async iterators
Finding a lost song with Node.js and async iteratorsLuciano Mammino
Ā 
AWS Observability (without the Pain)
AWS Observability (without the Pain)AWS Observability (without the Pain)
AWS Observability (without the Pain)Luciano Mammino
Ā 

More from Luciano Mammino (20)

Did you know JavaScript has iterators? DublinJS
Did you know JavaScript has iterators? DublinJSDid you know JavaScript has iterators? DublinJS
Did you know JavaScript has iterators? DublinJS
Ā 
What I learned by solving 50 Advent of Code challenges in Rust - RustNation U...
What I learned by solving 50 Advent of Code challenges in Rust - RustNation U...What I learned by solving 50 Advent of Code challenges in Rust - RustNation U...
What I learned by solving 50 Advent of Code challenges in Rust - RustNation U...
Ā 
Building an invite-only microsite with Next.js & Airtable - ReactJS Milano
Building an invite-only microsite with Next.js & Airtable - ReactJS MilanoBuilding an invite-only microsite with Next.js & Airtable - ReactJS Milano
Building an invite-only microsite with Next.js & Airtable - ReactJS Milano
Ā 
From Node.js to Design Patterns - BuildPiper
From Node.js to Design Patterns - BuildPiperFrom Node.js to Design Patterns - BuildPiper
From Node.js to Design Patterns - BuildPiper
Ā 
Let's build a 0-cost invite-only website with Next.js and Airtable!
Let's build a 0-cost invite-only website with Next.js and Airtable!Let's build a 0-cost invite-only website with Next.js and Airtable!
Let's build a 0-cost invite-only website with Next.js and Airtable!
Ā 
Everything I know about S3 pre-signed URLs
Everything I know about S3 pre-signed URLsEverything I know about S3 pre-signed URLs
Everything I know about S3 pre-signed URLs
Ā 
Serverless for High Performance Computing
Serverless for High Performance ComputingServerless for High Performance Computing
Serverless for High Performance Computing
Ā 
Serverless for High Performance Computing
Serverless for High Performance ComputingServerless for High Performance Computing
Serverless for High Performance Computing
Ā 
JavaScript Iteration Protocols - Workshop NodeConf EU 2022
JavaScript Iteration Protocols - Workshop NodeConf EU 2022JavaScript Iteration Protocols - Workshop NodeConf EU 2022
JavaScript Iteration Protocols - Workshop NodeConf EU 2022
Ā 
Building an invite-only microsite with Next.js & Airtable
Building an invite-only microsite with Next.js & AirtableBuilding an invite-only microsite with Next.js & Airtable
Building an invite-only microsite with Next.js & Airtable
Ā 
A look inside the European Covid Green Certificate - Rust Dublin
A look inside the European Covid Green Certificate - Rust DublinA look inside the European Covid Green Certificate - Rust Dublin
A look inside the European Covid Green Certificate - Rust Dublin
Ā 
The senior dev
The senior devThe senior dev
The senior dev
Ā 
Node.js: scalability tips - Azure Dev Community Vijayawada
Node.js: scalability tips - Azure Dev Community VijayawadaNode.js: scalability tips - Azure Dev Community Vijayawada
Node.js: scalability tips - Azure Dev Community Vijayawada
Ā 
A look inside the European Covid Green Certificate (Codemotion 2021)
A look inside the European Covid Green Certificate (Codemotion 2021)A look inside the European Covid Green Certificate (Codemotion 2021)
A look inside the European Covid Green Certificate (Codemotion 2021)
Ā 
Semplificare l'observability per progetti Serverless
Semplificare l'observability per progetti ServerlessSemplificare l'observability per progetti Serverless
Semplificare l'observability per progetti Serverless
Ā 
Finding a lost song with Node.js and async iterators - NodeConf Remote 2021
Finding a lost song with Node.js and async iterators - NodeConf Remote 2021Finding a lost song with Node.js and async iterators - NodeConf Remote 2021
Finding a lost song with Node.js and async iterators - NodeConf Remote 2021
Ā 
Finding a lost song with Node.js and async iterators - EnterJS 2021
Finding a lost song with Node.js and async iterators - EnterJS 2021Finding a lost song with Node.js and async iterators - EnterJS 2021
Finding a lost song with Node.js and async iterators - EnterJS 2021
Ā 
How to send gzipped requests with boto3
How to send gzipped requests with boto3How to send gzipped requests with boto3
How to send gzipped requests with boto3
Ā 
Finding a lost song with Node.js and async iterators
Finding a lost song with Node.js and async iteratorsFinding a lost song with Node.js and async iterators
Finding a lost song with Node.js and async iterators
Ā 
AWS Observability (without the Pain)
AWS Observability (without the Pain)AWS Observability (without the Pain)
AWS Observability (without the Pain)
Ā 

Recently uploaded

Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
Ā 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
Ā 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
Ā 
Transcript: #StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024BookNet Canada
Ā 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
Ā 
#StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024BookNet Canada
Ā 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
Ā 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
Ā 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
Ā 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
Ā 
SIEMENS: RAPUNZEL ā€“ A Tale About Knowledge Graph
SIEMENS: RAPUNZEL ā€“ A Tale About Knowledge GraphSIEMENS: RAPUNZEL ā€“ A Tale About Knowledge Graph
SIEMENS: RAPUNZEL ā€“ A Tale About Knowledge GraphNeo4j
Ā 
Integration and Automation in Practice: CI/CD in MuleĀ Integration and Automat...
Integration and Automation in Practice: CI/CD in MuleĀ Integration and Automat...Integration and Automation in Practice: CI/CD in MuleĀ Integration and Automat...
Integration and Automation in Practice: CI/CD in MuleĀ Integration and Automat...Patryk Bandurski
Ā 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
Ā 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
Ā 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
Ā 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
Ā 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
Ā 
Swan(sea) Song ā€“ personal research during my six years at Swansea ... and bey...
Swan(sea) Song ā€“ personal research during my six years at Swansea ... and bey...Swan(sea) Song ā€“ personal research during my six years at Swansea ... and bey...
Swan(sea) Song ā€“ personal research during my six years at Swansea ... and bey...Alan Dix
Ā 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
Ā 

Recently uploaded (20)

Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
Ā 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Ā 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
Ā 
Transcript: #StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024
Ā 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
Ā 
#StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: Whatā€™s new for BISAC - Tech Forum 2024
Ā 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
Ā 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
Ā 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Ā 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
Ā 
SIEMENS: RAPUNZEL ā€“ A Tale About Knowledge Graph
SIEMENS: RAPUNZEL ā€“ A Tale About Knowledge GraphSIEMENS: RAPUNZEL ā€“ A Tale About Knowledge Graph
SIEMENS: RAPUNZEL ā€“ A Tale About Knowledge Graph
Ā 
Integration and Automation in Practice: CI/CD in MuleĀ Integration and Automat...
Integration and Automation in Practice: CI/CD in MuleĀ Integration and Automat...Integration and Automation in Practice: CI/CD in MuleĀ Integration and Automat...
Integration and Automation in Practice: CI/CD in MuleĀ Integration and Automat...
Ā 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
Ā 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
Ā 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
Ā 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
Ā 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
Ā 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
Ā 
Swan(sea) Song ā€“ personal research during my six years at Swansea ... and bey...
Swan(sea) Song ā€“ personal research during my six years at Swansea ... and bey...Swan(sea) Song ā€“ personal research during my six years at Swansea ... and bey...
Swan(sea) Song ā€“ personal research during my six years at Swansea ... and bey...
Ā 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Ā 

Let's take the monolith to the cloud šŸš€

  • 1. Let's take the monolith to the cloud šŸš€ Luciano Mammino ( ) @loige loige.link/mono-lit 2022-03-01 1
  • 2. @loige Get the slides! šŸ‘‡ loige.link/mono-lit 2
  • 3. I'm LucianoĀ šŸ‘‹ Senior Architect @ fourTheorem (Dublin ) nodejsdp.link šŸ“”Co-Author of Node.js Design PatternsĀ  šŸ‘‰ Let's connect! Ā  (blog) Ā  (twitter) Ā  (twitch) Ā  (github) loige.co @loige loige lmammino 3
  • 4. We are business focused technologists that deliver. Ā | Ā | Accelerated Serverless AI as a Service Platform Modernisation We are hiring do you want to ? work with us loige 4
  • 5. I co-host a podcast about AWS with ! @eoins @loige awsbites.com Pleaze, subscribe šŸ˜‡ 5
  • 10. Business Summary @loige SaaS CMS for legal practices 1 founder + 1 developer šŸ’øBootstrapped business šŸ™ŒGood MVP, getting attention in the market šŸ’ŖStarted a TRIAL with a big customer 10
  • 11. Current problems @loige šŸ“ˆThe company is growing āš–but the technology does not scale! šŸ“¦1 monolithic server šŸ”„Frequent failures = šŸ¤¬unhappy customers šŸ˜„The business is at risk! 11
  • 12. Desired State @loige āš–More reliable & scalable infrastructure šŸ‘ŒMinimal amount of change required* * the team is not skilled with the cloud & containers, we need to keep cognitive load low 12
  • 13. @loige šŸ¤” "I heard that the cloud is great but we don't have the time and the skills to re-architect everything as micro-services!" 13
  • 15. ā› Let's start to dig deeper! @loige 15
  • 16. Example use cases @loige A user logs in the application and they should be able to see all their previously uploaded legal documents A user can upload new documents and organize them by providing speciļ¬c tags (client id, case number, etc.) A user might search for documents containing speciļ¬c keywords or tags 16
  • 17. Current Architecture* @loige Virtual Private Server * a beautiful monolith ā¤ 17
  • 18. Can we take the monolith to the cloud and make it resilient & scalable? @loige 18
  • 19. Load Balancer App Server(s) File Storage Session Storage Database Target architecture @loige 19
  • 20. šŸ§ Let's get more specific...* @loige * Mostly AWS from here 20
  • 21. S3 ElastiCache RDS Application Load Balancer EC2 Instance(s) Target architecture on AWS @loige 21
  • 22. āœ‹ Let's pause for a second... @loige 22
  • 23. šŸ¤” What is the cloud, really? @loige 23
  • 25. ... a little more involved than that! šŸ˜… @loige 25
  • 26. ā˜The "cloud" is built... @loige To scale To be resilient 26
  • 27. OK, but how?! šŸ˜’ @loige 27
  • 28. Region @loige A physical location around the world (e.g. North Virginia, IrelandĀ or Sydney)Ā  where AWS hosts a group of data centers. Ā  Regions help to provision infrastructure that is closer to the customers, so that our applications can have low latency and feel responsive. 28
  • 29. Availability Zone (AZ) @loige Discrete data center with redundant power, networking, and connectivity in an AWS Region. Ā  Data centers in diļ¬€erent availability zones are disjointed from one another, so if thereā€™s a serious outage, thatā€™s rarely aļ¬€ecting more than one availability zone at the same time. 29
  • 30. Availability Zone (AZ) @loige Itā€™s good practice to spread redundant infrastructure across diļ¬€erent availability zones in a given region to guarantee high availability. 30
  • 31. VPC @loige A virtual (private) network provisioned in a given region for a given AWS account. Ā  It is logically isolated from other virtual networks in AWS. Ā  Every VPC has a range of private IP addresses organised in one or more subnets. 31
  • 32. Subnet @loige A range of IPs in a given VPC and in a given availability zone that can be used to spin up and connect resources within the network. Ā  Subnets can be public or private. Ā  A public subnet can be used to run instances that can have a public IP assigned to them and can be reachable from outside the VPC itself. 32
  • 33. Subnet @loige Itā€™s good practice to keep front-facing servers (or load balancers) in public subnets and keep everything else (backend services, databases, etc.) in private subnets. Ā  Traļ¬ƒc between subnets can be enabled through routing tables to allow for instance a load balancer in a public subnet to forward traļ¬ƒc to backend instances in a private subnet. 33
  • 34. Quick Recap @loige Region: physical location with data centers Availability Zone: data center in a region VPC: a virtual private network in a region Subnet: range of IPs in a VPC in a given AZ Ā  34
  • 36. āœTODO List @loige ā˜ Create an AWS account ā˜ Select a region ā˜ Create and conļ¬gure a VPC 36
  • 38. ā˜‘ Create an AWS account ā˜‘ Select a region ā˜‘ Create and conļ¬gure a VPC āœTODO List @loige 38
  • 39. āœTODO List @loige ā˜ Load Balancer ā˜ EC2 ā˜ S3 ā˜ RDS ā˜ ElastiCache ā˜ Route 53 39
  • 40. Application Load Balancer (ALB) @loige The entry point to all the application traļ¬ƒc. Ā  Layer 7 Load Balancer (HTTP, HTTPS, WebSocket, gRPC). Ā  Highly available: replicated in all our public subnets. 40
  • 41. Application Load Balancer (ALB) @loige Scalable: can handle millions of request per second. Ā  Managed service: we don't need to conļ¬gure the OS or install software patches. Ā  Can be integrated with ACM (AWS Certiļ¬cate Manager) to support HTTPS. 41
  • 42. Application Load Balancer (ALB) @loige Target group 42
  • 43. Application Load Balancer (ALB) @loige Target group šŸ”„ /health āœ… āŒ /health /health āœ… Unhealty targets won't get any traļ¬ƒc 43
  • 44. Application Load Balancer (ALB) @loige Targets can be added dynamically. Ā  We can scale targets automatically using autoscaling groups. Ā  E.g. Add or remove instances based on num requests in-ļ¬‚ight or on avg CPU of the current instances. 44
  • 45. How does it scale? @loige Being a managed service, scalability is mostly handled out of the box by AWS. 45
  • 46. Resiliency @loige A load balancer can distribute traļ¬ƒc to multiple AZs, so if one of them becomes unavailable it will keep distributing traļ¬ƒc to the remaining ones.Ā  46
  • 47. āœTODO List @loige ā˜‘ Load Balancer ā˜ EC2 ā˜ S3 ā˜ RDS ā˜ ElastiCache ā˜ Route 53 47
  • 48. EC2 - Virtual Machine @loige Virtual machine running all the necessary software for the service (Nginx, Node.js, app code, etc.) Ā  They need to use Security Groups (allow traļ¬ƒc) and IAM Roles (allow them to access other AWS resources like S3). 48
  • 49. EC2 - Virtual Machine @loige We will need to provision multiple machines dynamically. Challenges: Consistency šŸ®Cattle vs šŸ™€Pet mindset Stateless applications 49
  • 50. Consistency @loige All our virtual machines have to be the same: we need to build an AMI (Amazon Machine Image). Ā  An AMI contains OS, libraries, software and source code. Ā  You can use an AMI to start a new instance. 50
  • 51. Consistency @loige While we can build an AMI manually, it's better to use tools to automate the work: Hashicorp Packer EC2 Image Builder 51
  • 52. šŸ®Cattle vs šŸ™€Pet mindset @loige Once an instance has been launched we shouldn't change it anymore (e.g update the OS, install new softare, update the code, etc.) Ā  If we need to change something, we build a new image and deploy new instances. Ā  Instances are disposable! 52
  • 53. Stateless @loige We are load balancing traļ¬ƒc so a user might be served by diļ¬€erent instances during their session. Ā  A single instance should not store any state (e.g. user sessions, uploaded ļ¬les, etc.) Ā  State should be stored outside instances (ElastiCache, S3, RDS, etc). 53
  • 54. Stateless @loige Making an application stateless might require a good amount of code change. Ā  A shortcut to this might be to enable in the ALB, but it's not recommended for scalability and resiliency.Ā  sticky sessions 54
  • 55. How does it scale? @loige Every instance will be able to handle a certain number of requests per second. Ā  We can scale by adding more instances when the traļ¬ƒc grows. 55
  • 56. Resiliency @loige We should have at least 1 instance per availability zone. Ā  If there is an AWS outage, the instances on the healthy availability zone will keep handling requests. Ā  We can use an autoscaling group to make sure that unhealthy instances are replaced. 56
  • 57. āœTODO List @loige ā˜‘ Load Balancer ā˜‘ EC2 ā˜ S3 ā˜ RDS ā˜ ElastiCache ā˜ Route 53 57
  • 58. Simple Storage Service (S3) @loige One of the very ļ¬rst AWS services and (probably) the most famous one. Ā  Object storage service: Allows you to store any amount of data durably. Ā  You need to use the SDK to read and write data. 58
  • 59. Simple Storage Service (S3) @loige Data can be organised in logical containers called Buckets. Ā  Key/value model: Inside a bucket you can store data by providing a key and the content. 59
  • 60. Simple Storage Service (S3) @loige const AWS = require('aws-sdk') const s3 = new AWS.S3() const params = { Bucket: 'my-bucket', Key: 'my-first-s3-file.txt', Body: Buffer.from('Hello, AWS') } s3.upload(params, (err) => { if (err) { console.error(err) } else { console.log('Upload successful') } }) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 const AWS = require('aws-sdk') 1 2 const s3 = new AWS.S3() 3 4 const params = { 5 Bucket: 'my-bucket', 6 Key: 'my-first-s3-file.txt', 7 Body: Buffer.from('Hello, AWS') 8 } 9 10 s3.upload(params, (err) => { 11 if (err) { 12 console.error(err) 13 } else { 14 console.log('Upload successful') 15 } 16 }) 17 const s3 = new AWS.S3() const AWS = require('aws-sdk') 1 2 3 4 const params = { 5 Bucket: 'my-bucket', 6 Key: 'my-first-s3-file.txt', 7 Body: Buffer.from('Hello, AWS') 8 } 9 10 s3.upload(params, (err) => { 11 if (err) { 12 console.error(err) 13 } else { 14 console.log('Upload successful') 15 } 16 }) 17 const params = { Bucket: 'my-bucket', Key: 'my-first-s3-file.txt', Body: Buffer.from('Hello, AWS') } const AWS = require('aws-sdk') 1 2 const s3 = new AWS.S3() 3 4 5 6 7 8 9 10 s3.upload(params, (err) => { 11 if (err) { 12 console.error(err) 13 } else { 14 console.log('Upload successful') 15 } 16 }) 17 s3.upload(params, (err) => { if (err) { console.error(err) } else { console.log('Upload successful') } }) const AWS = require('aws-sdk') 1 2 const s3 = new AWS.S3() 3 4 const params = { 5 Bucket: 'my-bucket', 6 Key: 'my-first-s3-file.txt', 7 Body: Buffer.from('Hello, AWS') 8 } 9 10 11 12 13 14 15 16 17 const AWS = require('aws-sdk') const s3 = new AWS.S3() const params = { Bucket: 'my-bucket', Key: 'my-first-s3-file.txt', Body: Buffer.from('Hello, AWS') } s3.upload(params, (err) => { if (err) { console.error(err) } else { console.log('Upload successful') } }) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 60
  • 61. Simple Storage Service (S3) @loige Too much code to change? A ļ¬rst migration could be done by using a something like Ā to create a "virtual ļ¬lesystem" that allows you to read/write to S3 seamlessly. s3fs-fuse 61
  • 62. How does it scale? @loige S3 is a managed service which automatically scales to thousands of read/write operations per second. 62
  • 63. Resiliency @loige S3 is provisioned in multiple AZs by default and it makes multiple copies of your data. Ā  All of this happens transparently, no special conļ¬guration required. 63
  • 64. āœTODO List @loige ā˜‘ Load Balancer ā˜‘ EC2 ā˜‘ S3 ā˜ RDS ā˜ ElastiCache ā˜ Route 53 64
  • 65. Relational Database Service (RDS) @loige Managed relational database service for MySql, PostgreSQL, MariaDB, Oracle & SQL Server. Ā  Being a managed service, AWS takes care of most common concerns like backups and updates (conļ¬gurable). 65
  • 66. How does it scale? @loige RDS PostgreSQL supports Read Replicas: you can provision additional instances to which you can distribute heavy read-only queries. Ā  Ā  66
  • 67. Resiliency @loige RDS PostgreSQL can be conļ¬gured to work in Multi-AZ mode: this means that there will be one or two standby copies of the database in diļ¬€erent AZs. Ā  If the primary DB instance or the primary AZ have an outage, one of the standby copies are promoted to become "the primary" instance. Ā  67
  • 68. Resiliency @loige Failover is fast but not instantaneous (60-120 seconds), so we need to make sure to plan for possible connectivity failures in your app and show clear error messages to the users. 68
  • 69. āœTODO List @loige ā˜‘ Load Balancer ā˜‘ EC2 ā˜‘ S3 ā˜‘ RDS ā˜ ElastiCache ā˜ Route 53 69
  • 70. ElastiCache @loige Managed in-memory caching service supporting Redis and Memcached. Ā  Meant to be used for use cases that don't require durability like data cache, session stores, gaming leaderboards, streaming, and analytics. Ā  AWS takes care of maintenance. 70
  • 71. How does it scale? @loige A single instance of Redis (with enough memory) can scale to signiļ¬cant amounts of traļ¬ƒc. Ā  If you need more, you can run ElastiCache Redis in Cluster Mode and shard your data across multiple Redis instances. 71
  • 72. Resiliency @loige ElastiCache Redis can operate in Multi-AZ mode. Ā  Similarly to RDS, in case of failures, there might be some downtime while the new master is promoted. Ā  We need to make sure the app accounts for Redis connection failures. 72
  • 73. āœTODO List @loige ā˜‘ Load Balancer ā˜‘ EC2 ā˜‘ S3 ā˜‘ RDS ā˜‘ ElastiCache ā˜ Route 53 73
  • 74. Route53 @loige Highly available and scalable cloud DNS service. Ā  Can be used to direct traļ¬ƒc on a given domain to our Application Load Balancer. 74
  • 75. āœTODO List @loige ā˜‘ Load Balancer ā˜‘ EC2 ā˜‘ S3 ā˜‘ RDS ā˜‘ ElastiCache ā˜‘ Route 53 75
  • 76. Infrastructure as Code (IaaC) @loige We could provision everything "manually" from the web console, but... Ā  It will be hard to create consistent environments for development and QA It will be hard to change things incrementally How would we test and review changes before applying them in production? 76
  • 77. Infrastructure as Code (IaaC) @loige It's better to deļ¬ne all the infrastructure using code. There are several tools that can help us with that: CloudFormation Hashicorp Terraform Cloud Development Kit (CDK) Pulumi 77
  • 78. { "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "AWS CloudFormation Sample Template EC2InstanceWithSecurityGroupSample: Create an Amazon EC2 instance running the A "Parameters" : { "KeyName": { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance", "Type": "AWS::EC2::KeyPair::KeyName", "ConstraintDescription" : "must be the name of an existing EC2 KeyPair." }, "InstanceType" : { "Description" : "WebServer EC2 instance type", "Type" : "String", "Default" : "t2.small", "AllowedValues" : [ "t1.micro", "t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "m1.small", "m1.medium", "m1.large" , "ConstraintDescription" : "must be a valid EC2 instance type." }, "SSHLocation" : { "Description" : "The IP address range that can be used to SSH to the EC2 instances", "Type": "String", "MinLength": "9", "MaxLength": "18", "Default": "0.0.0.0/0", "AllowedPattern": "(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})/(d{1,2})", "ConstraintDescription": "must be a valid IP CIDR range of the form x.x.x.x/x." } }, "Mappings" : { "AWSInstanceType2Arch" : { "t1.micro" : { "Arch" : "HVM64" }, "t2.nano" : { "Arch" : "HVM64" }, "t2.micro" : { "Arch" : "HVM64" }, @loige Example of CloudFormation template 78
  • 79. import * as cdk from '@aws-cdk/core' import * as ec2 from '@aws-cdk/aws-ec2' export class CdkUbuntuEc2Stack extends cdk.Stack { constructor (scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, { env: { account: process.env.CDK_DEPLOY_ACCOUNT || process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEPLOY_REGION || process.env.CDK_DEFAULT_REGION }, ...props }) const defaultVpc = ec2.Vpc.fromLookup(this, 'VPC', { isDefault: true }) const userData = ec2.UserData.forLinux() userData.addCommands( 'apt-get update -y', 'apt-get install -y git awscli ec2-instance-connect', 'until git clone https://github.com/aws-quickstart/quickstart-linux-utilities.git; do echo "Retrying"; done', 'cd /quickstart-linux-utilities', 'source quickstart-cfn-tools.source', 'qs_update-os || qs_err', 'qs_bootstrap_pip || qs_err', 'qs_aws-cfn-bootstrap || qs_err', 'mkdir -p /opt/aws/bin', 'ln -s /usr/local/bin/cfn-* /opt/aws/bin/' ) const machineImage = ec2.MachineImage.fromSSMParameter( '/aws/service/canonical/ubuntu/server/focal/stable/current/amd64/hvm/ebs-gp2/ami-id', ec2.OperatingSystemType.LINUX, userData ) const myVmSecurityGroup = new ec2.SecurityGroup(this, 'myVmSecurityGroup', { @loige Example of a CDK stack (TypeScript) 79
  • 80. An article about CDK (with examples) @loige loige.link/cdk-article 80
  • 82. Switch over @loige šŸ™€How do we migrate the data? Ā  šŸ˜„How do we switch the traļ¬ƒc to the new infrastructure? 82
  • 83. Streamlined data migration @loige Update the "old" code-base to save every new ļ¬le also to S3. Ā  Copy all the existing ļ¬le to the S3 bucket (S3 sync). 83
  • 84. Streamlined data migration @loige AWS Database Migration service allows you to replicate all the data from the old database to the new one. Ā  It will also keep the 2 Databases in sync during the switch over! 84
  • 85. Switching traffic @loige Request a new certiļ¬cate using AWS Certiļ¬cate Manager (ACM). Ā  Can be validated by email or DNS. Ā  Point your DNS to the new Load Balancer in AWS! 85
  • 86. WE ARE LIVE! šŸŽ‰ @loige Now what? 86
  • 88. New opportunities šŸ˜Š @loige We can scale dynamically! As the team grows and the system gets more complicated we can start to think about micro- services. We can start to play with other AWS services (E.g. SQS + Lambda for background task processing). 88
  • 90. šŸ’øCost @loige calculator.aws/#/estimate?id=1e0779adb67305166c01a583f5d7f61f7c92b029 Load Balancer $ 24.24 EC2 (6 instances) $ 85.87 ElastiCache Redis (3 instances) $ 78.84 RDS PostgreSQL (3 instances) $ 155.48 S3 (1TB) $ 32.55 TOT $ 376.98 90
  • 91. šŸ’øCost @loige Cost estimates are always a bit of a "gamble"... I selected some arbitrary instance sizes (EC2, RDS, ElastiCache). I am not accounting for auto-scaling. I am not accounting for network traļ¬ƒc. Better to look at cost in production and try to optimise when needed. Rule of thumb: try to balance cost with your revenue. Rule of thumb (2): consider the ! total cost of ownership 91
  • 92. ā˜ Create an AWS Account ā˜ Select a tool for IaaC ā˜ Create and conļ¬gure a VPC in a region (3 AZs, Public / Private subnets) ā˜ Create an S3 bucket ā˜ Update the old codebase to save every new ļ¬le to S3 ā˜ Copy all the existing ļ¬les to S3 ā˜ Spin up the database in RDS (Multi-AZ) ā˜ Migrate the data using Database Migration Service ā˜ Provision the ElastiCache Redis Cluster (Multi-AZ) āœBonus: a TODO list for the migration @loige ā˜ Create an AMI for the application ā˜ Create a security groups and an IAM policy for EC2 ā˜ Make the application stateless ā˜ Create an health check endpoint ā˜ Create an autoscaling group to spin up the instances ā˜ Create a certiļ¬cate in ACM ā˜ Provision an Application Load Balancer (public subnets) ā˜ Conļ¬gure Https, Targets and Health Checks ā˜ Conļ¬gure Route53 ā˜ Traļ¬ƒc switch-over through DNS šŸ¤ž šŸ“ Great guide to cloud migrations: 6 strategies for migrating applications to the cloud 92
  • 93. The cloud is a journey not a destination The cloud is a journey not a destination @loige 93
  • 94. ā˜nodejsdp.link Thank you! Special thanks to: , Ā ā¤ Photos by @micktwomey @eoins Unsplash @loige loige.link/mono-lit 94