Fully Automated Provisioning
Whether you are looking to maximize the efficiency and reliability of your existing operations or you are looking to take advantage of next generation dynamic infrastructure like virtualization and cloud computing, Fully automated provisioning is an essential capability.
“Fully automated provisioning” means having the ability to deploy, update, and repair your complete application infrastructure — from “bare-metal” provisioning to integrated application services — using only predeﬁned automated procedures.
Fully automated provisioning enables you to operate a more efficient and reliable application lifecycle across your organization. Developers and QA staff can be provided safe self-service capabilities for deploying and managing their own environments. System administrators in your production environments can operate with previously unachievable levels of efficiency and reliability. Outages and time-to-market can be significantly reduced while simultaneously improving the agility of your business.
Fully automated provisioning isn’t a specific technology. Fully automated provisioning is a design philosophy that usually takes a toolchain approach to implement the specification-driven, end-to-end automation that is needed.
The image below shows a basic example of a reference open source toolchain (and some tool options) for fully automated provisioning.
Automated OS Install or Image Launch
Prepare any specific version of the operating system and have it automatically stamped out across multiple machines (physical, local virtual machines, our cloud-based virtual machines). A variation of this step that has become popular with the rise of Cloud infrastructure is to “pre-bake” and manage a library of mostly configured virtual machine images that can be copied and spun up as needed. There are trade-offs with either approach.
Once the operating system is deployed there is still a considerable amount of work that needs to take place. You must ensure that all of the os, network, and security settings are correct for each specific instance. You also must ensure that all of the correct versions of libraries and base packages are in the right locations. This layer of automation also gives you the ability to automatically spot and correct “configuration drift” or unintended changes as they take place.
Orchestration is concerned with coordinating actions that have to take place across multiple tiers (web, application, database) and multiple servers to start, update, and manage the integrated system . Like the Configuration layer of automation, Orchestration must also be specification driven. Dependencies and ordering is critical. The Orchestration layer of automation can also provide the facilities and runbook necessary to speed ad-hoc management and emergency troubleshooting.
Automated Provisioning + Automated Lifecycle = Fully Automated Service Delivery
When you are building or integrating software to be a run as a business service, an error in deployment procedures or a incorrect configuration setting can cause an outage just as crippling as a software bug. These are the kinds of problems that can not only cause customer impacting outages, but also clog your delivery pipeline and lead to costly delays.
To avoid these problems, you need to gain consistency across production and pre-production environments (all the way back to integrated development environments or even individual developer’s laptops). This means you must manage your pre-production environments in the same automated and controlled manner as your production environments. This requires handling your automation code and configuration settings with the same process and discipline as your application source code, including the addition of an automated release and promotion process to quickly and reliably move from environment to environment.