Most of Part II of this book has focused on provisioning and configuring servers. This chapter will look at how to provision and configure larger groups of infrastructure elements. As infrastructure grows in size, complexity, and number of users, it becomes harder to achieve the benefits of infrastructure as code:
The larger scope of what may be affected by a given change makes it difficult to make changes frequently, quickly, and safely.
People spend more time on routine maintenance and firefighting, and less on making more valuable improvements to services.
Allowing users to provision and manage their own resources can risk disruption to other users and services.
The typical reaction is to centralize control over infrastructure. This leads to more time spent on meetings, documentation, and change process, and less time spent on activities that add value to the organization.
But an alternative to centralizing control is to design infrastructure to minimize the scope of impact of a given change. An effective approach to defining, provisioning, and managing infrastructure will enable changes to be made frequently and confidently even as the size of the infrastructure grows. This in turn allows ownership of application and service infrastructure to be safely delegated.
A stack is a collection of infrastructure elements that are defined as a unit (the inspiration for choosing the term stack comes mainly from ...