© Copyright KodeKloud
12 Factor App
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
Fast forward to today!
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
DEMO – Cloud Provisioning
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
https://12factor.net/
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
I VII
Codebase Port Binding
II VIII
Dependencies Concurrency
III IX
Config Disposability
IV X
Backing Services Dev/prod parity
V XI
Build, release, run Logs
VI XII
Processes Admin Processes
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
I
Codebase
© Copyright KodeKloud
Git Github Gitlab Bitbucket
>_ >_
$ git pull $ git push
© Copyright KodeKloud
☝️ Multiple apps sharing the same code is a violation of twelve-factor.
© Copyright KodeKloud
© Copyright KodeKloud
dev
staging
prod
© Copyright KodeKloud
© Copyright KodeKloud
II
Explicitly declare and isolate
dependencies
© Copyright KodeKloud
>_
$ pip install flask
© Copyright KodeKloud
☝️ A twelve-factor app never relies on implicit existence of system-wide packages.
II
Explicitly declare and isolate
dependencies
© Copyright KodeKloud
>_
$ pip install flask
© Copyright KodeKloud
>_ >_
$ pip install flask $ pip install –r requirements.txt
© Copyright KodeKloud
II
and isolate
dependencies
© Copyright KodeKloud
flask==2.0.0 flask==1.9.0
>_
$ curl
© Copyright KodeKloud
flask==2.0.0 flask==1.9.0
© Copyright KodeKloud
>_
$ docker build ....
© Copyright KodeKloud
>_
$ docker run ....
© Copyright KodeKloud
Docker Course & Labs Demo
© Copyright KodeKloud
© Copyright KodeKloud
III
Config
© Copyright KodeKloud
VIII
Concurrency
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
Load Balancer
© Copyright KodeKloud
VIII
Concurrency
© Copyright KodeKloud
© Copyright KodeKloud
☝️ Twelve-factor processes are stateless and share-nothing.
VI
Processes
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
visitCount=0 visitCount=2 visitCount=1
© Copyright KodeKloud
Sticky Sessions
visitCount=0 visitCount=2 visitCount=1
sessionInfo
© Copyright KodeKloud
☝️ Twelve-factor processes are stateless and share-nothing.
☝️ Sticky sessions are a violation of twelve-factor and should never be used or relied
upon.
VI
Processes
© Copyright KodeKloud
visitCount=0 visitCount=2 visitCount=1
sessionInfo
© Copyright KodeKloud
visitCount=0 visitCount=2 visitCount=1
sessionInfo
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
IV
Backing Services
© Copyright KodeKloud
☝️ Treat backing services as attached resources.
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
III
Config
© Copyright KodeKloud
© Copyright KodeKloud
© Copyright KodeKloud
☝️ The twelve-factor app stores config in environment variables.
III
Config
© Copyright KodeKloud
dev
staging
prod
© Copyright KodeKloud
© Copyright KodeKloud
V
Build, release, run
© Copyright KodeKloud
🤦♀️
© Copyright KodeKloud
🤦♀️
© Copyright KodeKloud
☝️The twelve-factor app uses strict separation between the build, release, and run
stages.
V
Build, release, run
© Copyright KodeKloud
flask-app-test:v1
flask-app-test:v2
flask-app-test:v3
flask-app-test:2023-02-25-09-52
flask-app-test
flask-app-test
app.exe
./app
>_
$ docker build
1. Build 2. Release
© Copyright KodeKloud
flask-app-test:v1
flask-app-test:v2
flask-app-test:v3
flask-app-test:2023-02-25-09-52
flask-app-test
flask-app-test
app.exe
./app
>_
$ docker build
1. Build 2. Release 3. Run
© Copyright KodeKloud
☝️The twelve-factor app uses strict separation between the build, release, and run
stages.
V
Build, release, run
© Copyright KodeKloud
© Copyright KodeKloud
VII
Port Binding
© Copyright KodeKloud
© Copyright KodeKloud
5001 5000 5002 6379
© Copyright KodeKloud
☝️The twelve-factor app is completely self-contained
VII
Port Binding
© Copyright KodeKloud
© Copyright KodeKloud
☝️ The twelve-factor app's processes are disposable, meaning they can be started or
stopped at a moment's notice.
IX
Disposability
© Copyright KodeKloud
>_ >_
$ docker stop .... $ docker stop ....
© Copyright KodeKloud
☝️ The twelve-factor app's processes are disposable, meaning they can be started or
stopped at a moment's notice.
☝️ The twelve-factor app's processes should shutdown gracefully when they receive a
SIGTERM signal from the process manager.
IX
Disposability
© Copyright KodeKloud
>_
$ docker stop ....
SIGTERM
SIGKILL
© Copyright KodeKloud
© Copyright KodeKloud
X
Dev/prod parity
© Copyright KodeKloud
dev
staging
prod
© Copyright KodeKloud
Time Gap Personnel Tools Gap
Gap
dev
Developer
staging
prod
Days Operations
Weeks
© Copyright KodeKloud
☝️ The twelve-factor app is designed for continuous deployment by keeping the gap
between development and production small.
☝️ The twelve-factor developer resists the urge to use different backing services
between development and production.
X
Dev/prod parity
© Copyright KodeKloud
Time Gap Personnel Tools Gap
Gap
dev
Developer
staging
prod
Hours
Days Developer
Operations
Minutes
Weeks +
Operations
© Copyright KodeKloud
© Copyright KodeKloud
XI
Logs
© Copyright KodeKloud
© Copyright KodeKloud
LogFile.txt LogFile.txt LogFile.txt
© Copyright KodeKloud
☝️ A twelve-factor app never concerns itself with routing or storage of its output
stream.
☝️ Store logs in a centralized location in a structured format.
XI
Logs
© Copyright KodeKloud
STDOUT STDOUT STDOUT
Logs Agent Logs Agent Logs Agent
© Copyright KodeKloud
© Copyright KodeKloud
XII
Admin Processes
© Copyright KodeKloud
visitCount=8K
© Copyright KodeKloud
visitCount=8K
visitCount=0
© Copyright KodeKloud
© Copyright KodeKloud