Infrastructure as code tools like Ansible, Chef, Puppet, Terraform, etc. can make it easy to build and manage infrastructure in the cloud.
But as with any code, this can quickly devolve into a fragile monolith that is difficult and scary to change.
In order to routinely change, extend, and improve a system, it needs to be well designed. Change management practices and tooling need to create confidence that changes will work correctly, and that the impact of failures will be low and easily corrected. This creates a virtuous cycle of continuously improving the quality of the systems.
This talk explores infrastructure design patterns used at multiple clients across financial services, retail, public sector, media, and others that support continuous change to:
- Reduce the “blast radius” for a given change
- Facilitate scaling different elements of a system according to traffic requirements
- Make it easy to update, upgrade, and refactor systems without requiring massive, organization-wide programmes of change
- Improve security, visibility, auditability, and observability of systems
- Increase the number of people and teams able to work across systems while minimizing coordination overhead
Topics covered include:
- Designing and implementing an effective infrastructure test automation strategy
- Creating change management pipelines that enforce rigorous change control processes while supporting rapid, frequent changes
- Structuring infrastructure codebases for environments (e.g. Terraform, CloudFormation, etc.), server configuration (e.g. Ansible, Chef, Puppet), container orchestration clusters (e.g. Kubernetes), container images (e.g. Docker), and serverless functions (i.e. Function as a Service)