Why Infrastructure as Code Tools are Not Enough
When introduced 15 years ago, Infrastructure as Code (IaC) was a significant disrupter for IT and a key enabler for DevOps. It soon became the de facto method for software developers to describe and deploy cloud infrastructure. This shift to a developer-centric vision of infrastructure offered its users frequent updates and a way to clarify and simplify API-centric automation.
As cloud infrastructure became commoditised, leading to broader IaC adoption, limitations emerged. While the needs of developers are application-centric, IaC is infrastructure-centric. This contrast between the expectations of the development and operations teams creates delays and security risks, unacceptable tradeoffs for the enterprise.
As a result, with cloud providers moving up the stack with more value-added services and organisations slowly evolving to scale their digital transformation efforts, the need to provide proper governance and improve cross-team collaboration on top of IaC has become even more critical.
Trends in IaC
Many businesses today leverage cloud applications for a variety of reasons, including scalability, operational cost, and effectiveness. These applications manifest themselves as an architecture with multiple components; managing cloud applications, therefore, refers to managing the lifecycle of the components (or resources) that make up the application.
A typical example of an application architecture includes a multi-tier web application with web servers, a persistent layer as a database, and other components that the application needs to function. This arrangement requires operational alignment between the application and the infrastructure resources that support it. When the application changes, so must the resources.
So, how do you manage an application architecture in a consistent and repeatable way?
The objective is to treat infrastructure-as-code like any application code, provisioning the infrastructure to meet the changing needs of software delivery throughout a standard software delivery CI/CD process. This means creating a continuous IaC infrastructure pipeline that is interwoven with the software development and delivery process, leveraging best practices from software delivery to infrastructure delivery.
In practice, this requires considering the infrastructure lifecycle and depositing the IaC code into a source control repository, versioning it, running tests against it, packaging it, running Lint and syntax tests on it, and deploying it in a testing environment before delivering it to a production environment in a safe, secure, and repeatable manner. These are the basics of infrastructure-as-code and how it is used when managing infrastructure.