You've got a handle on DevOps basics and now you're starting to understand IaC. How do you put them together in practice?
Infrastructure as code and DevOps: Basics and principles
Infrastructure as code is a DevOps practice in which IT operations admins codify the underlying infrastructure of their production environment as software. Also called IaC, software-defined or programmable infrastructure, this practice enables automated management and provisioning, along with several other key benefits, in continuous integration/continuous delivery (CI/CD) pipelines, similar to scripting.
DevOps has been a hot topic in IT for several years, as it turns preceding organizational team structures on their heads. Rather than pass projects from one team to the next, starting at development and ending at IT operations' deployment, DevOps is designed to merge all of those different IT teams into one. Accompanied by CI/CD and automation tools, a DevOps pipeline can increase deployment speed and quality.
In DevOps, scripts typically automate static steps in a particular process to make it consistent and repeatable, yielding the same result every time. By contrast, IaC enables IT pros to codify more flexible and adaptable processes, such as automated provisioning and deployment.
Infrastructure as code benefits for DevOps
Infrastructure as code can enable IT organizations to create IT deployments reminiscent of physical infrastructure in a cloud service. Here are some examples of benefits that infrastructure as code brings to the DevOps table.
- Dynamic learning curve. Infrastructure code is typically written in a high-level language. JSON, for example, is a lightweight and text-based language that enables IT operations admins to write infrastructure code alongside the development team. This strengthens the interdepartmental relationships that DevOps demands.
- Code language flexibility. IaC tools can use either declarative or imperative code languages, such as SQL and C++ respectively. Imperative programming describes each necessary step in a process to reach the desired state, whereas declarative programming describes that desired state without specific instructions on how to reach it. This latter method enables the IaC tool to perform any actions necessary without human intervention. Rather than an admin clicking a green Go button to initiate an update, the IaC tool performs this automatically to retain the desired state configuration.
- Automated tasks. Infrastructure as code helps DevOps staff eliminate manual processes not just in production environments, but backward through a CI/CD pipeline -- into development and QA testing, deployment and management.
- Security mindset. Codified infrastructure opens the door to code-level security practices, which is key to a multilevel security strategy.
Disadvantages of infrastructure as code in DevOps
As it turns out, most of the benefits of infrastructure as code in DevOps environments can become disadvantages when considered from another angle.
- Complexity. Infrastructure as code is as simple -- or complex -- as a DevOps organization makes it. IaC is highly malleable, so its general construction will be custom to the developer or IT pro who writes it. While the code performs more or less the same regardless of the degree of personalization, this kind of specificity easily creates knowledge vacuums in IT organizations. Even if the original writer is still with the company, new staff will encounter an unfamiliar and personalized code. For IT organizations that work with IaC tools, code should include comments with explanations for the task any given snippet performs. And note that since it relies on code, IaC should be tested and validated before deployment.
- Automated failures. The risk of automated failure is not unique to infrastructure as code, but it is uniquely risky in a DevOps context. Extensive automation leads to fast and efficient task completion, especially when changes apply broadly throughout an entire IT ecosystem, not just a single server or application. Any issues with or caused by those changes can become catastrophic before anyone is able to throw a kill switch. Something as small as misallocated storage resources can rapidly create a domino effect of failures.
- Security is precarious. While security is a main benefit, IaC also has the potential to increase infrastructure sprawl -- a common cloud management and security problem. Moreover, accidental automation can expose data or compromise APIs.
Choosing an IaC tool: On premises vs. cloud
Selection and use of the right IaC tools for DevOps use cases depends on your organization's overall environment, and whether it's on premises, in the cloud or a mix of both. Common third-party IaC tools, such as Terraform, Chef, Puppet and Ansible, are cloud-agnostic. Each major cloud platform also has built-in tools ideal for organizations that rely on that cloud service.
For organizations in hybrid or multi-cloud architectures, a third-party, cloud-agnostic tool such as Terraform enables the same configuration to operate on different cloud platforms from one template. Organizations with no plan to hybridize their cloud deployments should use the cloud vendor's built-in IaC functions.
Infrastructure as code and DevOps use cases
Infrastructure as code can be complicated, but when carefully managed it delivers great rewards in speed and autonomy. Put those together, and what are actual use cases for infrastructure as code in DevOps organizations?
Cloud deployments. IT pros manage and deploy cloud resources and configurations through template files, typically written in JSON. These files are particularly useful for hybrid-cloud organizations because they enable admins to manage multiple cloud environments with a single configuration or resource template.
Infrastructure testing. With infrastructure as code, IT organizations can create a test environment that exactly replicates their production environment. This templated and fully functional mirror enables staff to freely test and experiment with features, updates and changes.
Testing is also a great starting point for IaC pilot projects. Every IT ecosystem has peculiarities, specialties and edge cases, and writing infrastructure code is a trial-and-error process to accommodate them all. Even for more seasoned users of infrastructure as code in DevOps workflows, the testing environment is fertile ground to fine-tune and expand IaC capabilities without disrupting services.
Monitoring. Monitoring goes hand-in-hand with testing as a DevOps use case for IaC. The testing stage is all about experimentation, gathering information and assessing results, so monitoring is an intrinsic necessity. But infrastructure as code monitoring isn't limited to just testing.
Infrastructure as code monitoring focuses on a different set of data than does application monitoring. For example, app monitoring deals with more business-centric or customer-facing KPIs, whereas IaC monitoring prioritizes infrastructure-level reports, logs and alerts. This setup especially benefits organizations that operate on multiple cloud platforms, as both the IaC tool and the cloud service -- assuming a third-party IaC tool is in use -- produce activity logs and error reports. Those reports will reveal important details about the infrastructure.