SlideShare a Scribd company logo
1 of 59
Building 12 Factor Apps
with .NET Core.
Serhiy Kalinets
Steer73
About Me
17 years in the business
In .NET since 2005
Love to code
Technical Architect
@ Steer73
@skalinets 2
@skalinets 3
Facebook Groups
Lviv .NET User Group
.NET Core Ukrainian User Group
Kiev ALT.NET
@skalinets 4
Monolith vs Microservices
@skalinets 5
Here comes .NET Core
@skalinets 6
Why Cloud Ready Apps?
Cost-effective
Failure-resilient
@skalinets 7
Why Cloud Ready Apps?
Reuse of existing infrastructure
Works for non-cloud apps as well
@skalinets 8
Pets vs Cattle
@skalinets 9
12 Factor Apps
Use declarative formats for setup automation, to
minimize time and cost for new developers joining the
project;
@skalinets 10
12 Factor Apps
Have a clean contract with the underlying operating
system, offering maximum portability between
execution environments;
@skalinets 11
12 Factor Apps
Are suitable for deployment on modern cloud
platforms, obviating the need for servers and systems
administration;
@skalinets 12
12 Factor Apps
Minimize divergence between development and
production, enabling continuous deployment for
maximum agility;
@skalinets 13
12 Factor Apps
Can scale up without significant changes to tooling,
architecture, or development practices.
@skalinets 14
I. Codebase
One codebase tracked in revision control,
many deploys
@skalinets 15
I. Codebase
A codebase is any single repo
A deploy is a running instance
of the app
The codebase is the same
across all deploys
@skalinets 16
II. Dependencies
Explicitly declare and isolate dependencies
@skalinets 17
II. Dependencies
Use a package manager
Never rely on implicit existence of system-wide
packages
Do not rely on the implicit existence of any system tools
@skalinets 18
Package Manager: Paket
Supports Nuget feeds
Manages transient dependencies, locks out versions
Considered to be faster than Nuget but in some cases is
slower
@skalinets 19
III. Config
Store config in the environment
@skalinets 20
III. Config
An app’s config is everything that is likely to vary
between deploys
Does not include app internal config (routes, mappings
etc.)
@skalinets 21
Config litmus test
An app has all config correctly factored out of the code
is when
The codebase could be made open source at any
moment, without compromising any credentials.
@skalinets 22
Configuration Files
Avoid using appsettings.<env>.json. The only feasible
use is to store your local dev stuff
Transformations during deployment requires additional
setup and is error prone
Set of different configs per env scales badly
@skalinets 23
Vendor Specific Configuration Source
E.g. App settings, Key Vault in Azure
Can simplify deployment and operations
Violate 12 factor apps (vendor lock)
@skalinets 24
Environment variables
Easy to manage by devops
Cannot be checked to source code
OS / Platform agnostic
Scale up smoothly
@skalinets 25
.NET Core Configuration
WebHost.CreateDefaultBuilder() contains
AddJsonFile(…,"appsettings.json", …)
AddUserSecrets()
AddEnvironmentVariables()
AddCommandLine()
@skalinets 26
User Secrets
cli tool Micosoft.Extensions.SecretManager.Tools
dotnet user-secrets set "foo" "boo“
@skalinets 27
.NET Tips
Use configuration objects as sessions
Define baseline config in appsettings.json
Override with env variables, app settings, user secrets
@skalinets 28
IV. Backing services
Treat backing services as attached resources
@skalinets 29
IV. Backing services
A backing service is any service the app consumes over
the network as part of its normal operation
Locally managed services should not be distinguished
from third party services
@skalinets 30
@skalinets 31
V. Build, release, run
Strictly separate build and run stages
@skalinets 32
Codebase Deployment Stages
Build
Release
Run
@skalinets 33
Build
Converts a code repo into an executable bundle known
as a build
Might (and should) include running tests, code analysis
etc.
@skalinets 34
Tools: FAKE (F# Make)/ Cake
Build as a code (C# or F#), not XML or boxes with
arrows
Versioned. If new features need build procedure
update, we just update and commit the build script
No coupling to CI tool, can be run from anywhere,
including devs’ machines
@skalinets 35
Release
A unique ID should be assigned to each release
Releases are immutable, any change to environment
should be done with a new release
Use tools like Octopus / Jenkins Blue Ocean / VSTS etc.
@skalinets 36
Run
Handled by process managers / orchestrator, not
humans
Should have as few moving part as possible
@skalinets 37
VI. Processes
Execute the app as one or more stateless
processes
@skalinets 38
VI. Processes
Should be stateless and “share nothing”
Bundle assets during the build
No shared memory / disks
No sticky sessions
@skalinets 39
VII. Port binding
Export services via port binding
@skalinets 40
VII. Port binding
The twelve-factor app is completely self-contained and
does not need web or other host
Web server functionality is exposed by binding to a
port
@skalinets 41
Port binding in .NET
WebHostBuilder().UseKestrel()
@skalinets 42
VIII. Concurrency
Scale out via the process model
@skalinets 43
VIII. Concurrency
Processes are a first class citizen
Using the unix process model for running service
daemons
Processes are managed by process managers /
orchestrators
@skalinets 44
@skalinets 45
IX. Disposability
Maximize robustness with fast startup and
graceful shutdown
@skalinets 46
IX. Disposability
Strive to minimize startup time to provide more agility
for the release process, scaling up and robustness
Shut down gracefully when receive a SIGTERM signal
from the process manager
@skalinets 47
During Shutdown
Web processes should not accept new request during
shut down, finish current ones
Worker processes should return unprocessed item
back to the queue
@skalinets 48
X. Dev/prod parity
Keep development, staging, and production
as similar as possible
@skalinets 49
Gaps between dev and prod
The time gap: Code that takes days, weeks, or even
months to go into production
The personnel gap: Developers write code, ops
engineers deploy it
The tools gap: Developers use other stack than is on
producttion
@skalinets 50
Minimizing Gaps
The time gap: write code and deploy it to prod in hours
or minutes
The personnel gap: developers are involved in
deploying and monitoring their code in prod
The tools gap: use the same services on dev and prod
@skalinets 51
X. Dev/prod parity
All environments should have the same topology
Size might differ (for cost efficiency)
Use chocolatey / docker for running backing services
locally
@skalinets 52
XI. Logs
Treat logs as event streams
@skalinets 53
XI. Logs
Logs provide visibility into the behavior of a running
app
Stream of aggregated, time-ordered events collected
from the output streams of all running processes and
backing services
@skalinets 54
XI. Logs
A twelve-factor app never concerns itself with routing
or storage of its output stream
Write logs to stdout instead
Execution environment captures, routes and stores
logs
@skalinets 55
Logging tips (not 12 factor apps )
Use structured logging (Serilog)
In simple setups it’s might be OK to route logs from the
app (Serilog AppInsights sink)
Don’t save logs to your database
@skalinets 56
XII. Admin processes
Run admin/management tasks as one-off
processes
@skalinets 57
XII. Admin processes
Examples: EF migrations with dotnet ef
Should be bundled with release
Source versions should match
@skalinets 58
Thanks!
kalinets@gmail.com
@skalinets
https://skalinets.github.io
@skalinets 59

More Related Content

What's hot

Software Rollout
Software RolloutSoftware Rollout
Software Rolloutcolmbennett
 
Tecnicas de estimacion de costos de proyecto software
Tecnicas de estimacion de costos de proyecto softwareTecnicas de estimacion de costos de proyecto software
Tecnicas de estimacion de costos de proyecto softwareantonio
 
Middleware
MiddlewareMiddleware
MiddlewareTensor
 
Managed service provider
Managed service providerManaged service provider
Managed service providerElena Benson
 
Agile Software Development Life Cycle
Agile Software Development Life CycleAgile Software Development Life Cycle
Agile Software Development Life CycleUTKARSHSRIVASTAVA235
 
Shift left - find defects earlier through automated test and deployment
Shift left - find defects earlier through automated test and deploymentShift left - find defects earlier through automated test and deployment
Shift left - find defects earlier through automated test and deploymentClaudia Ring
 
SRE-iously! Defining the Principles, Habits, and Practices of Site Reliabilit...
SRE-iously! Defining the Principles, Habits, and Practices of Site Reliabilit...SRE-iously! Defining the Principles, Habits, and Practices of Site Reliabilit...
SRE-iously! Defining the Principles, Habits, and Practices of Site Reliabilit...Tori Wieldt
 
Managing Requirements in Agile Development - Best Practices for Tool-Based Re...
Managing Requirements in Agile Development - Best Practices for Tool-Based Re...Managing Requirements in Agile Development - Best Practices for Tool-Based Re...
Managing Requirements in Agile Development - Best Practices for Tool-Based Re...pd7.group
 
Estado del arte de la Ingeniería de Sistemas
Estado del arte de la Ingeniería de SistemasEstado del arte de la Ingeniería de Sistemas
Estado del arte de la Ingeniería de SistemasEdwin Camino
 
Fundamentals of Software Quality Assurance & Testing
Fundamentals of Software Quality Assurance & TestingFundamentals of Software Quality Assurance & Testing
Fundamentals of Software Quality Assurance & Testingrongbaz
 
Software Development Methodologies
Software Development MethodologiesSoftware Development Methodologies
Software Development MethodologiesNicholas Davis
 
Feature Toggle
Feature ToggleFeature Toggle
Feature ToggleBryan Liu
 
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...ITSM Academy, Inc.
 
Agile manifesto - Agile - What is it?
Agile manifesto - Agile - What is it?Agile manifesto - Agile - What is it?
Agile manifesto - Agile - What is it?Mediotype .
 

What's hot (20)

Software Rollout
Software RolloutSoftware Rollout
Software Rollout
 
Change Management
Change ManagementChange Management
Change Management
 
Tecnicas de estimacion de costos de proyecto software
Tecnicas de estimacion de costos de proyecto softwareTecnicas de estimacion de costos de proyecto software
Tecnicas de estimacion de costos de proyecto software
 
Middleware
MiddlewareMiddleware
Middleware
 
Managed service provider
Managed service providerManaged service provider
Managed service provider
 
Agile Software Development Life Cycle
Agile Software Development Life CycleAgile Software Development Life Cycle
Agile Software Development Life Cycle
 
Software Testing
Software TestingSoftware Testing
Software Testing
 
Shift left - find defects earlier through automated test and deployment
Shift left - find defects earlier through automated test and deploymentShift left - find defects earlier through automated test and deployment
Shift left - find defects earlier through automated test and deployment
 
Gathering requirements
Gathering requirementsGathering requirements
Gathering requirements
 
SRE-iously! Defining the Principles, Habits, and Practices of Site Reliabilit...
SRE-iously! Defining the Principles, Habits, and Practices of Site Reliabilit...SRE-iously! Defining the Principles, Habits, and Practices of Site Reliabilit...
SRE-iously! Defining the Principles, Habits, and Practices of Site Reliabilit...
 
Managing Requirements in Agile Development - Best Practices for Tool-Based Re...
Managing Requirements in Agile Development - Best Practices for Tool-Based Re...Managing Requirements in Agile Development - Best Practices for Tool-Based Re...
Managing Requirements in Agile Development - Best Practices for Tool-Based Re...
 
Estado del arte de la Ingeniería de Sistemas
Estado del arte de la Ingeniería de SistemasEstado del arte de la Ingeniería de Sistemas
Estado del arte de la Ingeniería de Sistemas
 
Mobile App Testing Strategy
Mobile App Testing StrategyMobile App Testing Strategy
Mobile App Testing Strategy
 
Fundamentals of Software Quality Assurance & Testing
Fundamentals of Software Quality Assurance & TestingFundamentals of Software Quality Assurance & Testing
Fundamentals of Software Quality Assurance & Testing
 
Sdlc models
Sdlc modelsSdlc models
Sdlc models
 
Software Development Methodologies
Software Development MethodologiesSoftware Development Methodologies
Software Development Methodologies
 
Feature Toggle
Feature ToggleFeature Toggle
Feature Toggle
 
Software Development Life Cycle
Software Development Life CycleSoftware Development Life Cycle
Software Development Life Cycle
 
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...
Site Reliability Engineering: An Enterprise Adoption Story (an ITSM Academy W...
 
Agile manifesto - Agile - What is it?
Agile manifesto - Agile - What is it?Agile manifesto - Agile - What is it?
Agile manifesto - Agile - What is it?
 

Similar to Building 12 factor apps with ASP.NET Core, Сергій Калинець

8 - OpenShift - A look at a container platform: what's in the box
8 - OpenShift - A look at a container platform: what's in the box8 - OpenShift - A look at a container platform: what's in the box
8 - OpenShift - A look at a container platform: what's in the boxKangaroot
 
Combining Cloud Native & PaaS: Building a Fully Managed Application Platform ...
Combining Cloud Native & PaaS: Building a Fully Managed Application Platform ...Combining Cloud Native & PaaS: Building a Fully Managed Application Platform ...
Combining Cloud Native & PaaS: Building a Fully Managed Application Platform ...DigitalOcean
 
Cloud Native Architectures with an Open Source, Event Driven, Serverless Plat...
Cloud Native Architectures with an Open Source, Event Driven, Serverless Plat...Cloud Native Architectures with an Open Source, Event Driven, Serverless Plat...
Cloud Native Architectures with an Open Source, Event Driven, Serverless Plat...Daniel Krook
 
Deploying more technology to shift from agility to anti-fragility
Deploying more technology to shift from agility to anti-fragilityDeploying more technology to shift from agility to anti-fragility
Deploying more technology to shift from agility to anti-fragilitySpyros Lambrinidis
 
DevOps LA Meetup Intro to Habitat
DevOps LA Meetup Intro to HabitatDevOps LA Meetup Intro to Habitat
DevOps LA Meetup Intro to HabitatJessica DeVita
 
DEVNET-1169 CI/CT/CD on a Micro Services Applications using Docker, Salt & Ni...
DEVNET-1169	CI/CT/CD on a Micro Services Applications using Docker, Salt & Ni...DEVNET-1169	CI/CT/CD on a Micro Services Applications using Docker, Salt & Ni...
DEVNET-1169 CI/CT/CD on a Micro Services Applications using Docker, Salt & Ni...Cisco DevNet
 
Efficient platform engineering with Microk8s & gopaddle.pdf
Efficient platform engineering  with  Microk8s & gopaddle.pdfEfficient platform engineering  with  Microk8s & gopaddle.pdf
Efficient platform engineering with Microk8s & gopaddle.pdfVinothini Raju
 
.NET Application Modernization with PAS and Azure DevOps
.NET Application Modernization with PAS and Azure DevOps.NET Application Modernization with PAS and Azure DevOps
.NET Application Modernization with PAS and Azure DevOpsVMware Tanzu
 
Mastinder singh visualcv_resume
Mastinder singh visualcv_resumeMastinder singh visualcv_resume
Mastinder singh visualcv_resumeMastinder Singh
 
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...Ajeet Singh Raina
 
Slide DevSecOps Microservices
Slide DevSecOps Microservices Slide DevSecOps Microservices
Slide DevSecOps Microservices Hendri Karisma
 
OCP Datacomm RedHat - Kubernetes Launch
OCP Datacomm RedHat - Kubernetes LaunchOCP Datacomm RedHat - Kubernetes Launch
OCP Datacomm RedHat - Kubernetes LaunchPT Datacomm Diangraha
 
Red Hat OpenShift Container Platform Overview
Red Hat OpenShift Container Platform OverviewRed Hat OpenShift Container Platform Overview
Red Hat OpenShift Container Platform OverviewJames Falkner
 
Leveraging HybridMultiCloud for Devops and Automation Platform
Leveraging HybridMultiCloud for Devops and Automation PlatformLeveraging HybridMultiCloud for Devops and Automation Platform
Leveraging HybridMultiCloud for Devops and Automation PlatformDevOps Indonesia
 
SDLC & DevOps Transformation with Agile
SDLC & DevOps Transformation with AgileSDLC & DevOps Transformation with Agile
SDLC & DevOps Transformation with AgileAbdel Moneim Emad
 
Nyc mule soft_meetup_13_march_2021
Nyc mule soft_meetup_13_march_2021Nyc mule soft_meetup_13_march_2021
Nyc mule soft_meetup_13_march_2021NeerajKumar1965
 
AWS Community Day - Amy Negrette - Gateways to Gateways
AWS Community Day - Amy Negrette - Gateways to GatewaysAWS Community Day - Amy Negrette - Gateways to Gateways
AWS Community Day - Amy Negrette - Gateways to GatewaysAWS Chicago
 

Similar to Building 12 factor apps with ASP.NET Core, Сергій Калинець (20)

8 - OpenShift - A look at a container platform: what's in the box
8 - OpenShift - A look at a container platform: what's in the box8 - OpenShift - A look at a container platform: what's in the box
8 - OpenShift - A look at a container platform: what's in the box
 
Combining Cloud Native & PaaS: Building a Fully Managed Application Platform ...
Combining Cloud Native & PaaS: Building a Fully Managed Application Platform ...Combining Cloud Native & PaaS: Building a Fully Managed Application Platform ...
Combining Cloud Native & PaaS: Building a Fully Managed Application Platform ...
 
CI adventures in .NET
CI adventures in .NETCI adventures in .NET
CI adventures in .NET
 
Cloud Native Architectures with an Open Source, Event Driven, Serverless Plat...
Cloud Native Architectures with an Open Source, Event Driven, Serverless Plat...Cloud Native Architectures with an Open Source, Event Driven, Serverless Plat...
Cloud Native Architectures with an Open Source, Event Driven, Serverless Plat...
 
Modern application development with heroku
Modern application development with herokuModern application development with heroku
Modern application development with heroku
 
Deploying more technology to shift from agility to anti-fragility
Deploying more technology to shift from agility to anti-fragilityDeploying more technology to shift from agility to anti-fragility
Deploying more technology to shift from agility to anti-fragility
 
DevOps LA Meetup Intro to Habitat
DevOps LA Meetup Intro to HabitatDevOps LA Meetup Intro to Habitat
DevOps LA Meetup Intro to Habitat
 
DEVNET-1169 CI/CT/CD on a Micro Services Applications using Docker, Salt & Ni...
DEVNET-1169	CI/CT/CD on a Micro Services Applications using Docker, Salt & Ni...DEVNET-1169	CI/CT/CD on a Micro Services Applications using Docker, Salt & Ni...
DEVNET-1169 CI/CT/CD on a Micro Services Applications using Docker, Salt & Ni...
 
Efficient platform engineering with Microk8s & gopaddle.pdf
Efficient platform engineering  with  Microk8s & gopaddle.pdfEfficient platform engineering  with  Microk8s & gopaddle.pdf
Efficient platform engineering with Microk8s & gopaddle.pdf
 
.NET Application Modernization with PAS and Azure DevOps
.NET Application Modernization with PAS and Azure DevOps.NET Application Modernization with PAS and Azure DevOps
.NET Application Modernization with PAS and Azure DevOps
 
Mastinder singh visualcv_resume
Mastinder singh visualcv_resumeMastinder singh visualcv_resume
Mastinder singh visualcv_resume
 
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
 
Slide DevSecOps Microservices
Slide DevSecOps Microservices Slide DevSecOps Microservices
Slide DevSecOps Microservices
 
OCP Datacomm RedHat - Kubernetes Launch
OCP Datacomm RedHat - Kubernetes LaunchOCP Datacomm RedHat - Kubernetes Launch
OCP Datacomm RedHat - Kubernetes Launch
 
Red Hat OpenShift Container Platform Overview
Red Hat OpenShift Container Platform OverviewRed Hat OpenShift Container Platform Overview
Red Hat OpenShift Container Platform Overview
 
Leveraging HybridMultiCloud for Devops and Automation Platform
Leveraging HybridMultiCloud for Devops and Automation PlatformLeveraging HybridMultiCloud for Devops and Automation Platform
Leveraging HybridMultiCloud for Devops and Automation Platform
 
SDLC & DevOps Transformation with Agile
SDLC & DevOps Transformation with AgileSDLC & DevOps Transformation with Agile
SDLC & DevOps Transformation with Agile
 
Nyc mule soft_meetup_13_march_2021
Nyc mule soft_meetup_13_march_2021Nyc mule soft_meetup_13_march_2021
Nyc mule soft_meetup_13_march_2021
 
.NetKS Catalogue
.NetKS Catalogue.NetKS Catalogue
.NetKS Catalogue
 
AWS Community Day - Amy Negrette - Gateways to Gateways
AWS Community Day - Amy Negrette - Gateways to GatewaysAWS Community Day - Amy Negrette - Gateways to Gateways
AWS Community Day - Amy Negrette - Gateways to Gateways
 

More from Sigma Software

Fast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIsFast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIsSigma Software
 
"Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur""Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur"Sigma Software
 
Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"Sigma Software
 
Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...Sigma Software
 
Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"Sigma Software
 
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"Sigma Software
 
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...Sigma Software
 
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”Sigma Software
 
Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"Sigma Software
 
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...Sigma Software
 
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"Sigma Software
 
Business digitalization trends and challenges
Business digitalization trends and challengesBusiness digitalization trends and challenges
Business digitalization trends and challengesSigma Software
 
Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"Sigma Software
 
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”Sigma Software
 
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”Sigma Software
 
Training solutions and content creation
Training solutions and content creationTraining solutions and content creation
Training solutions and content creationSigma Software
 
False news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid themFalse news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid themSigma Software
 
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...Sigma Software
 
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...Sigma Software
 

More from Sigma Software (20)

Fast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIsFast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIs
 
"Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur""Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur"
 
Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"
 
Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...
 
Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"
 
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
 
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
 
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
 
Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"
 
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
 
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
 
VOLVO x HACK SPRINT
VOLVO x HACK SPRINTVOLVO x HACK SPRINT
VOLVO x HACK SPRINT
 
Business digitalization trends and challenges
Business digitalization trends and challengesBusiness digitalization trends and challenges
Business digitalization trends and challenges
 
Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"
 
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
 
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
 
Training solutions and content creation
Training solutions and content creationTraining solutions and content creation
Training solutions and content creation
 
False news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid themFalse news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid them
 
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
 
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
 

Recently uploaded

Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfIdiosysTechnologies1
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 

Recently uploaded (20)

Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdf
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 

Building 12 factor apps with ASP.NET Core, Сергій Калинець

  • 1. Building 12 Factor Apps with .NET Core. Serhiy Kalinets Steer73
  • 2. About Me 17 years in the business In .NET since 2005 Love to code Technical Architect @ Steer73 @skalinets 2
  • 4. Facebook Groups Lviv .NET User Group .NET Core Ukrainian User Group Kiev ALT.NET @skalinets 4
  • 6. Here comes .NET Core @skalinets 6
  • 7. Why Cloud Ready Apps? Cost-effective Failure-resilient @skalinets 7
  • 8. Why Cloud Ready Apps? Reuse of existing infrastructure Works for non-cloud apps as well @skalinets 8
  • 10. 12 Factor Apps Use declarative formats for setup automation, to minimize time and cost for new developers joining the project; @skalinets 10
  • 11. 12 Factor Apps Have a clean contract with the underlying operating system, offering maximum portability between execution environments; @skalinets 11
  • 12. 12 Factor Apps Are suitable for deployment on modern cloud platforms, obviating the need for servers and systems administration; @skalinets 12
  • 13. 12 Factor Apps Minimize divergence between development and production, enabling continuous deployment for maximum agility; @skalinets 13
  • 14. 12 Factor Apps Can scale up without significant changes to tooling, architecture, or development practices. @skalinets 14
  • 15. I. Codebase One codebase tracked in revision control, many deploys @skalinets 15
  • 16. I. Codebase A codebase is any single repo A deploy is a running instance of the app The codebase is the same across all deploys @skalinets 16
  • 17. II. Dependencies Explicitly declare and isolate dependencies @skalinets 17
  • 18. II. Dependencies Use a package manager Never rely on implicit existence of system-wide packages Do not rely on the implicit existence of any system tools @skalinets 18
  • 19. Package Manager: Paket Supports Nuget feeds Manages transient dependencies, locks out versions Considered to be faster than Nuget but in some cases is slower @skalinets 19
  • 20. III. Config Store config in the environment @skalinets 20
  • 21. III. Config An app’s config is everything that is likely to vary between deploys Does not include app internal config (routes, mappings etc.) @skalinets 21
  • 22. Config litmus test An app has all config correctly factored out of the code is when The codebase could be made open source at any moment, without compromising any credentials. @skalinets 22
  • 23. Configuration Files Avoid using appsettings.<env>.json. The only feasible use is to store your local dev stuff Transformations during deployment requires additional setup and is error prone Set of different configs per env scales badly @skalinets 23
  • 24. Vendor Specific Configuration Source E.g. App settings, Key Vault in Azure Can simplify deployment and operations Violate 12 factor apps (vendor lock) @skalinets 24
  • 25. Environment variables Easy to manage by devops Cannot be checked to source code OS / Platform agnostic Scale up smoothly @skalinets 25
  • 26. .NET Core Configuration WebHost.CreateDefaultBuilder() contains AddJsonFile(…,"appsettings.json", …) AddUserSecrets() AddEnvironmentVariables() AddCommandLine() @skalinets 26
  • 27. User Secrets cli tool Micosoft.Extensions.SecretManager.Tools dotnet user-secrets set "foo" "boo“ @skalinets 27
  • 28. .NET Tips Use configuration objects as sessions Define baseline config in appsettings.json Override with env variables, app settings, user secrets @skalinets 28
  • 29. IV. Backing services Treat backing services as attached resources @skalinets 29
  • 30. IV. Backing services A backing service is any service the app consumes over the network as part of its normal operation Locally managed services should not be distinguished from third party services @skalinets 30
  • 32. V. Build, release, run Strictly separate build and run stages @skalinets 32
  • 34. Build Converts a code repo into an executable bundle known as a build Might (and should) include running tests, code analysis etc. @skalinets 34
  • 35. Tools: FAKE (F# Make)/ Cake Build as a code (C# or F#), not XML or boxes with arrows Versioned. If new features need build procedure update, we just update and commit the build script No coupling to CI tool, can be run from anywhere, including devs’ machines @skalinets 35
  • 36. Release A unique ID should be assigned to each release Releases are immutable, any change to environment should be done with a new release Use tools like Octopus / Jenkins Blue Ocean / VSTS etc. @skalinets 36
  • 37. Run Handled by process managers / orchestrator, not humans Should have as few moving part as possible @skalinets 37
  • 38. VI. Processes Execute the app as one or more stateless processes @skalinets 38
  • 39. VI. Processes Should be stateless and “share nothing” Bundle assets during the build No shared memory / disks No sticky sessions @skalinets 39
  • 40. VII. Port binding Export services via port binding @skalinets 40
  • 41. VII. Port binding The twelve-factor app is completely self-contained and does not need web or other host Web server functionality is exposed by binding to a port @skalinets 41
  • 42. Port binding in .NET WebHostBuilder().UseKestrel() @skalinets 42
  • 43. VIII. Concurrency Scale out via the process model @skalinets 43
  • 44. VIII. Concurrency Processes are a first class citizen Using the unix process model for running service daemons Processes are managed by process managers / orchestrators @skalinets 44
  • 46. IX. Disposability Maximize robustness with fast startup and graceful shutdown @skalinets 46
  • 47. IX. Disposability Strive to minimize startup time to provide more agility for the release process, scaling up and robustness Shut down gracefully when receive a SIGTERM signal from the process manager @skalinets 47
  • 48. During Shutdown Web processes should not accept new request during shut down, finish current ones Worker processes should return unprocessed item back to the queue @skalinets 48
  • 49. X. Dev/prod parity Keep development, staging, and production as similar as possible @skalinets 49
  • 50. Gaps between dev and prod The time gap: Code that takes days, weeks, or even months to go into production The personnel gap: Developers write code, ops engineers deploy it The tools gap: Developers use other stack than is on producttion @skalinets 50
  • 51. Minimizing Gaps The time gap: write code and deploy it to prod in hours or minutes The personnel gap: developers are involved in deploying and monitoring their code in prod The tools gap: use the same services on dev and prod @skalinets 51
  • 52. X. Dev/prod parity All environments should have the same topology Size might differ (for cost efficiency) Use chocolatey / docker for running backing services locally @skalinets 52
  • 53. XI. Logs Treat logs as event streams @skalinets 53
  • 54. XI. Logs Logs provide visibility into the behavior of a running app Stream of aggregated, time-ordered events collected from the output streams of all running processes and backing services @skalinets 54
  • 55. XI. Logs A twelve-factor app never concerns itself with routing or storage of its output stream Write logs to stdout instead Execution environment captures, routes and stores logs @skalinets 55
  • 56. Logging tips (not 12 factor apps ) Use structured logging (Serilog) In simple setups it’s might be OK to route logs from the app (Serilog AppInsights sink) Don’t save logs to your database @skalinets 56
  • 57. XII. Admin processes Run admin/management tasks as one-off processes @skalinets 57
  • 58. XII. Admin processes Examples: EF migrations with dotnet ef Should be bundled with release Source versions should match @skalinets 58