The Principles of Infrastructure as Code
Having explored the origins and rationale for the project of managing Infrastructure as Code, we now turn to the core principles we should put into practice to make it happen.
Adam Jacob, co-founder of Opscode, and creator of Chef argues that, at a high level, there are two steps:
Break the infrastructure down into independent, reusable, network-accessible services.
Integrate these services in such a way as to produce the functionality your infrastructure requires.
Adam further identifies ten principles that describe what the characteristics of the reusable primitive components look like. His essay is essential reading[4], but I will summarize his principles here:
- Modularity
Our services should be small and simple—think at the level of the simplest freestanding, useful component.
- Cooperation
Our design should discourage overlap of services, and should encourage other people and services to use our service in a way which fosters continuous improvement of our design and implementation.
- Composability
Our services should be like building blocks—we should be able to build complete, complex systems by integrating them.
- Extensibility
Our services should be easy to modify, enhance, and improve in response to new demands.
- Flexibility
We should build our services using tools that provide unlimited power to ensure we have the (theoretical) ability to solve even the most complicated of problems.
- Repeatability
Our services should produce the same results, in the same ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access