By James Denyer, Senior Director of Docs and Developer Education, Pulumi
Infrastructure as Code (IaC) has transformed how we manage and provision computing infrastructure. Traditionally, IaC has relied on domain-specific languages (DSLs) like YAML, JSON, and HCL, and while effective, these scripting languages come with challenges. As the industry continues to evolve, there is a growing trend toward using familiar, standard programming languages for IaC, which can offer several benefits over traditional scripting approaches. Using standard programming languages can enable and give teams with those skills a way to leverage their existing skills and the ecosystems around them to help developers be more efficient and deliver higher value faster and with improved quality.
The Global Infrastructure as Code (IaC) Market size is expected to reach $2.8 billion by 2028.
Limitations of Domain-Specific Languages (DSLs)
While scripting languages have been the backbone of IaC, they have limitations. One of the most significant issues is the lack of modularity. In general, as infrastructure complexity grows, scripts tend to become increasingly more monolithic and unwieldy. This can make maintenance a nightmare, as changes in one part of the script can have unintended ripple effects elsewhere.
Another common problem is the difficulty in testing and validating scripts. Unlike modern programming languages with robust testing frameworks, scripting languages often lack these capabilities, making it harder to ensure code reliability and performance.
Adoption of Standard Programming Languages
The industry has recently shifted towards using standard programming languages like Python, Go, and JavaScript for IaC. It has also brought several advantages, such as improved code reuse and maintainability. Additionally, standard programming languages offer more mature ecosystems with extensive libraries and frameworks that can be leveraged to create robust and reusable infrastructure code.
Using familiar languages also means that development and operations teams can collaborate more effectively. Developers do not need to learn a new DSL, and operations teams can benefit from the vast array of tools and practices already established in the software engineering world, ultimately leading to a more seamless and productive workflow.
Enhancing DevOps with Software Engineering Practices
Adopting standard programming languages for IaC inherently integrates software engineering best practices into DevOps. For instance, version control, code reviews, and automated testing have become more straightforward, enhancing infrastructure code's overall quality and reliability.
This shift also fosters better collaboration between development and operations teams. With a common language and shared tools, both teams can work together more effectively, reducing silos and improving communication. This collaborative environment is crucial for successful DevOps implementation, where continuous integration and continuous deployment (CI/CD) pipelines are essential.
Using standard languages allows teams to adopt advanced programming paradigms, such as functional programming and domain-driven design, further enhancing the modularity and maintainability of the codebase. This results in more predictable and reliable infrastructure management.
The Evolution of IaC
Several tools and platforms are leading the charge in this new direction. For example, Pulumi, a modern IaC tool, allows developers to define infrastructure using languages like TypeScript, Python, and Go. This approach simplifies the learning curve and enables using advanced software engineering practices such as object-oriented programming, unit testing, and continuous integration.
Other platforms like AWS Cloud Development Kit (CDK) also embrace this trend, allowing infrastructure to be defined using familiar languages like TypeScript, JavaScript, Python, and Java.
The future of IaC is promising, with trends pointing towards even deeper integration of software development practices into infrastructure management. Expect more sophisticated tooling, better integration with CI/CD pipelines, and increased AI and machine learning use to optimize and automate infrastructure provisioning and management.
About James
James Denyer is the senior director of Docs and Developer Education for Pulumi. Prior to joining Pulumi in 2023, he was the senior director of Product, Design and Growth for Microsoft Learn – Developer Relations and the senior director of Azure Platform Evangelism and Experiences for Microsoft. He also held earlier roles in technology in a strategic capacity at Sappington, Starbucks and REI.