What problems does Terraform solve?
Terraform is an Infrastructure as Code tool that allows describing an infrastructure in a set of HCL formatted files and store the state of that infrastructure.
Terraform grew in popularity among cloud users simply because it removes some of the human interactions with cloud platforms and permits standardisation and harmonisation when dealing with infrastructure provisioning.
How is cloud consumption evolving?
Cloud providers allowed a whole new way to consume and use infrastructure, we went from on premise solutions to basic infrastructure providers to what is essentially the state of art, up to date, managed infrastructure accessible from everywhere allowing anyone with a laptop and internet connection to deploy virtually anything.
What happened first with cloud usage was simply a mirroring of the on-premises setups : we configure out base (identity management, network, image registries etc.) and deploy applications using the services that are most similar to what we had before : mainly virtual machines in a “lift & shift” strategy aimed at reducing costs and manage less while having more.
This usage grew to using more managed, serverless or containerized solutions and more centered around “full” managed services such as Kubernetes.
Now where does terraform fit into all of this? Well, it is basically the most common and recognized solution to setup infrastructures across most cloud providers.
But where is the catch?
What are Terraform downsides?
The aim of Terraform is to provide a solution to provision infrastructures that (in my opinion) is very well suited for classic applications (n-tiers for example) but becomes a lot less convenient when we aim towards cloud native architecture (for example Kubernetes).
The issue we face is cloud providers are moving more and more towards fully managed and complex solutions and tools like terraform have a hard time keeping up. In simple ways, terraform by design has limited programming constructs that prove to be limiting with cloud services evolution.
So basically, terraform is limited by its design and its language (HCL) which makes it hard to handle edge cases, or complex infrastructure designs. Its biggest pain point being the lack or procedural programming primitives like looping or even if/else statements out of line.
Should I be concerned?
It depends. Are you intending to provision a simple infrastructure to deploy a couple of apps? If that’s the case, terraform is probably the best option for you. It will allow you to keep track of your infrastructure, avoid manual changes that require documentation and a whole set of processes and most importantly, provides you with the blueprints of all your infrastructure resources.
But!
If you’re delving into a complex architecture, let’s say you want to deploy a Kubernetes cluster and manage ingress operators, then you may want to either couple terraform with other solutions (such as ArgoCD) or move towards cloud provided solutions (such as config controller for GCP).
What are our options?
You may think that I hate terraform and HCL at this point but that is not the case. Terraform is a great tool that helped a lot of people and companies in their go or move to cloud journey, and today this same amazing tool is becoming less and less convenient as we are pushing our use of the cloud to include all edge cases, new services and want to do more.
Now this would be the point where I would tell you about the next best thing, but I think that we’re not there yet. I have read about many tools that seem to be the future of infrastructure as code (like Crossplane), but many are simply not ready to handle production environments or still rely on other tools (like terraform) for bootstrapping.
What’s next?
Well, that’s hard to say (isn’t that convenient for me!). Taking a guess into the future of an IT orientations is very complex. We’ve seen many tools and solutions disappear as quickly as they came to light.
That being said, I do think that we will be moving out from Terraform in the upcoming years if the tool doesn’t evolve to answers for the complexity of cloud infrastructures if one of the emerging alternatives becomes prod ready.
Sources
- Terraform: https://www.terraform.io/
- HCL: https://github.com/hashicorp/hcl
- ArgoCD: https://argo-cd.readthedocs.io/en/stable/
- Crossplane: https://www.crossplane.io/