teams ~ 8 teams ~ 40 teams a few monoliths (and lots of scripts) micro-services! debs, RPMs debs, RPMs, AMIs, gems, tarballs, Docker! 2 data-centers lots of AWS accounts
deploys 2. Dependencies - Explicitly declare and isolate dependencies 3. Config - Store config in the environment 4. Backing Services - Treat backing services as attached resources 5. Build, release, run - Strictly separate build and run stages 6. Processes - Execute the app as one or more stateless processes 7. Port binding - Export services via port binding 8. Concurrency - Scale out via the process model 9. Disposability - Maximize robustness with fast startup and graceful shutdown 10. Dev/prod parity - Keep development, staging, and production as similar as possible 11. Logs - Treat logs as event streams 12. Admin processes - Run admin/management tasks as one-off processes from http://12factor.net The Twelve Factors
Linux variant Splunk support captures stdout/stderr no app support required New Relic support application monitoring system monitoring deployment notification CloudWatch support alerts you when service is down via email or web-hook Auto-scaling multiple servers load-balancing support for scaling schedules Zero-downtime deployments safe upgrades safe config changes
#{auto_scaling_group_name}" while !is_instance_healthy?(elb, instance_id) sleep 5 end Instance asks ELB: “How good am I?” … then tells CloudFormation to proceed