Infrastructure as Code (IaC) is a critical component of the modern application delivery toolchain that enables software companies to manage their IT infrastructure using machine-readable configuration files. These files contain the specification of resources like virtual machines, networks, load balancers, connection topologies, and data centers, making configurations easy to distribute and edit.
IaC enables version control for IT resources since the infrastructure configuration files can be pushed into source control the same way source code files are kept. IaC is also crucial for the automation of resource provisioning by dividing infrastructure into modular components, giving teams a template to follow when deploying applications.
Terraform is an open-source IaC declarative coding tool that allows developers to provision IT resources programmatically using the HashiCorp Configuration Language (HCL). Developed by Hashicorp, the tool codifies cloud APIs, providing a steady workflow to manage multiple cloud services through a consistent CLI on a local machine. With Terraform, teams can download installable community-developed modules for quicker management of routine provisioning tasks.
As of June 2021, Terraform 1.0 achieved General Availability (GA) status, marking a major milestone in its automation of workflow maintenance, upgrade simplicity, and interoperability. This post explores Terraform’s journey to GA status and its implications for modern DevOps.
Terraform by HashiCorp
The release of CloudFormation by AWS in February 2011 marked a new age of cloud computing because it allowed developers to focus on optimizing AWS applications by automating the setup and configuration of resources. The platform could not, however, support multi-cloud deployment and configuration automation, which is what the creators of Terraform meant to address.
Through the use of providers, Terraform adds resource sets from multiple cloud solutions/deployment platforms to the data sources managed within an application’s IT environment. The platform’s flexibility is also extended by installable modules developed by the open-source community and third-party vendors to simplify plugin provision. The platform has grown from being a cloud-agnostic version of CloudFormation to a mature solution with an extensive support community and numerous contributions and downloads.
Terraform Version History
With the latest release of Terraform, software teams can run infrastructure at scale by being able to manage solutions that are customized in-house as well as those from existing service providers. Through the abstraction of the data center and associated IT resources, the platform provides a flexible model for the representation and management of infrastructure. It has since grown through various developments and contributions by the open-source community and, after sufficient hardening, this year achieved GA status according to the HashiCorp Packer 1.0 specifications.
Below, I’ll briefly take you through some of the milestones in Terraform’s version history.
The first production version of Terraform was released in July 2014 and supported DigitalOcean and AWS Cloud. This and subsequent versions included features like increased fault tolerance for multi-cloud deployment, dynamic assignment of resource scheduling, and software-defined networking. Versions 0.9 to 0.9.11 also included options to store remote state and query data with outputs for a simpler and quicker resource configuration experience. These versions were mainly used to manage hardware services and resources on the two public cloud platforms mentioned above.
This set of versions included seven major releases with various changes that addressed deprecation cycles from the previous versions. It also introduced a new language and syntax, HCL2, that allows for seamless future changes and makes configuration files simpler to read and write. Some top features included in these releases were:
- Tracking of output value sensitivity
- Tolerance for legacy configuration language
- Modules that enable alternative provider configurations
- Configuration directory arguments that can be referenced from the CLI
- Backend arguments removed
- Obsolete features removed, improved consistency for CLI behavior
- Recursive module targeting
- Interactive approvals
- Explicit provider source locations
Tech marketer? Don’t compromise on your content!
Terraform v1 was a major milestone in the platform’s development, as modules written in any v1.x version could plan and apply configuration management throughout other releases without needing any changes. With the newer versions, the wire protocol used to build providers enabled compatibility with all other releases targeting the same architecture and OS without having to recompile binaries or modify the source code.
Some of the major features that made v1 stable and mature included:
- An extensive subset of Terraform language features
- Defined subsets of workflow commands for the Terraform CLI
- Wire protocols for interoperability; communication between providers and the Terraform Core, as well as for the installation of modules and providers
Terraform v1 — Going GA
HashiCorp rolled out Terraform v1.0 after ascertaining that it fulfilled the following four criteria for a 1.0 release.
Since its introduction to the open-source market in 2014, Terraform has gone through years of hardening in production. The product has been used by thousands of individuals and companies across the globe, with a little over 100,000,000 official downloads as of June 2021.
Supported Use Cases
The most crucial components of a framework’s functionality are defined by its users. Since the release of v0.1, contributors have been developing tools and then seeing how organizations implement them in their use cases. For instance, changes introduced in Terraform v0.12 are meant to support flexible Terraform use cases defined by organizational workflows. Based on user feedback, the HashiCorp team adapted Terraform to meet user needs.
Well-Defined User Experience
HashiCorp aims to make the Terraform framework easier to learn by facilitating workflows and user experiences that bring major use cases into practice. This involves including features that improve interactivity based on user feedback, removing workflows that don’t live up to their potential, and maintaining proper documentation to reduce the learning curve for infrastructure configuration.
Mature Technical Architecture
The HashiCorp team has made multiple changes, introducing newer advanced features that benefit both developers and users. Over time, the platform has optimized the triage process and internal workflows so that companies can create better, more effective roadmaps for product stability and maturity.
Key Features of Terraform v1- GA
Terraform has achieved maturity through the development of advanced features to address technical debt. I discuss some top features of the production-ready Terraform here below.
The platform aims to simplify DevOps by automating the management of IT infrastructure through the use of configuration files and coding principles. It uses programmatic functions to translate HCL code into the JSON format used to pass functions as a string for dynamic infrastructure operations.
Once configurations have been specified declaratively, the Terraform platform will generate an execution plan that describes what operations it will perform. Additionally, the framework’s tooling requests approval from IT operators before making any changes to the infrastructure.
Terraform deals with resource dependencies by mapping out a dependency graph that denotes Terraform configurations. The platform constantly updates the graph to generate fresh states and plans, among other things.
The platform enables a collaborative workflow and interface for the automatic provisioning of computing resources. Using execution plans and Infrastructure as Code, Terraform abstracts the high-level implementation of computing resources to remove the manual effort required to configure them.
These features of Terraform v1 enable the provisioning of infrastructure with an improved upgrade experience, extended maintenance period, and higher level of interoperability.
HashiCorp offers a private instance of the Terraform platform with enterprise-grade features while enforcing no resource limits. With Terraform Enterprise, organizations can enable such advanced features as:
- Single sign-on (SSO) with SAML
- Automated recovery, backups, and restores
- Full-stack logging and monitoring
- Workspace integration
With Terraform Cloud, companies can get resources hosted by HashiCorp’s Terraform on demand or in response to triggers. Terraform Cloud is deeply integrated with CI workflows and data for convenient and powerful DevOps operations. Additionally, cloud agents allow for the seamless combination of local data centers with cloud resources for hybrid deployments.
I’d list the top attractive features of Terraform Cloud as:
- Support for remote execution
- Workspaces for infrastructure organization
- Integration of version control
- Private module registries
- Access control and governance
Benefits of Using Terraform for Infrastructure Automation
There are numerous benefits of integrating Terraform into DevOps pipelines. Some of my favorite include:
Enhanced multi-cloud automation: Software teams can use the same configuration files and tooling to manage resources on multiple cloud environments.
Reduced development costs: Since Terraform is a masterless framework that doesn’t require a master node to store and track updates, it interfaces directly with cloud APIs, eliminating the infrastructure and maintenance costs needed for master nodes.
Reduced time-to-deploy: Terraform standardizes resource provisioning through modules and providers, allowing teams to focus on fast and efficient deployments and upgrades.
Infrastructure orchestration: The platform also creates templates for configuration files so resources can be defined, provisioned, and configured predictably and repeatedly.
Clearly mapped resource dependencies: Terraform provides a single dashboard that describes your infrastructure on all deployment environments via resource graphs.
Consistent workflow: Using providers and modules, you can deploy the same templates for different development stages, allowing for a consistent workflow between your development, test, and production teams.
Terraform is an open-source tool that enables efficient, automated, and reusable resource provisioning through Infrastructure as Code (IaC) declarations. The platform relies on a simple, modular syntax with a low-enough learning curve for all DevOps teams to get started with infrastructure automation and orchestration. With the general availability of Terraform, the platform now offers enhanced interoperability, efficient upgrades, and a significant maintenance period to help automation workflows stabilize gradually.