https://developers.redhat.com/blog/2017/06/22/12-factors-to-cloud-success/
- CodeBase i.e. GIT
All
pieces of code tracked by revision identifier (code base same across all deploys, but diffent versions may be active in diffent deploys)
- Configuration
Anything
different bewteen environments is externalized and fetched at run time (config vs code seperation) - config stored in environment
- Backing Service (attached resources)
All
endpoints (web services, databases, queues) available thru abstraction layer
(i.e. URL)
- Build, release, run
Strict
separation of stages 1) building the app, combining app with configuration,
starting app
- Port Binding
App
is self healing to automatically make available resources and remove failed
resources
- Concurrency
Concurrency by scaling app horizontally (Horizontal scaling means that you scale by adding more machines into your pool of
resources whereas Vertical scalingmeans that you scale by adding more power (CPU, RAM) to an existing
machine).
7. Disposibility
Robustness
better when start and shut down quickly - allows for rapid elasticity scaling,
deployment of changes, and recovery from crash
8. Logs
Treat
logs as event streams (consolidate logs
to allow analytics to be added)
- Dependency
Declare and isolate
dependency via tooling
- Processes
App executes as
stateless processes (share nothing)
- Dev Prod parity
Keep env close as
possible
- Admin Services
Run
in replicated envoronment migrations