What is our primary use case?
We use HashiCorp Terraform to set up AWS infrastructure, and sometimes Cloudflare.
It is not exactly a tool for configuration, it is for setting up the development of the infrastructure.
What is most valuable?
The concept of infrastructure as code is quite intriguing.
We have an infrastructure in our code and a state file where we can verify whether something is changed when it was changed, and who changed it. When we use Terraform, these kinds of things fascinate us.
What needs improvement?
I often wonder why they don't create a UI. That is something I always consider. I realize CLI is useful, but I prefer to do things in this manner. Why are we opting for CLI? I want to make things easy. I understand that most don't agree with me, but that is what I would prefer.
I don't think that they will agree on this. I am looking for a drag-and-drop or anything that can just generate modules behind the scenes and allow people to quickly accomplish things.
I am aware that it does not serve the purpose of Terraform, and that too, is an issue.
We have a purpose for infrastructure as code, and when the code is gone, you are working on UI. Terraform is not a programming language, most things are straightforward; we cannot do. Terraform lacks these features.
I would say the programming language, perhaps using more of a programming language rather than this declarative language, is something I'd want to explore in the future.
I would want to see more programmatic capabilities implemented, such as if, else, and simple to manage things in terms of how I can use some programming functions to assist us to achieve more.
I would like to have programming language-relevant features, to have programming language be the primary way.
For how long have I used the solution?
I have been using HashiCorp Terraform for three years.
What do I think about the stability of the solution?
I don't think HashiCorp Terraform is particularly stable. I would rate it a three and a half out of five. However, we are always working on it and making improvements. They had a lot of problems in the past, but today most things are done correctly.
While there are new versions coming in, there are always issues that arise.
It is not about stability, but about version upgrades. They have newer versions and occasionally backward compatibility. It happened a long time ago but is not an issue anymore. I had a bad experience at the beginning, which is why I remember it.
Someone who is just starting, in my opinion, will encounter difficulties. That is why I believe the language should be changed to a programmed language that everyone can comprehend.
The previous version had several difficulties with the state file, including some backward compatibility and parameter changes, but they are now more stable.
What do I think about the scalability of the solution?
I have not encountered any issues with HashiCorp Terraform's scalability.
We are using Terraform to build up infrastructure in order to document our infrastructure more declaratively. That is what Terraform excels at. I never had any problems with scalability, either in terms of improvement or anything else.
There are some glitches with Terraform servers. When we are initializing, we occasionally encounter an issue; in three years, this has happened to me twice.
We have 20 people in our organization who use this solution, if we add developers we have approximately 60 people.
Which solution did I use previously and why did I switch?
From inside the cloud services, I am working on EKS Kubernetes, ECS Elastic Containerized Services, and Elasticsearch, which is now known as OpenSearch. I am working on EKS, Kubernetes, ECS, Elastic Containerized Services, as well as Elastic Search, which is now known as Open Search, and Redis ElastiCache, which is a component of MSK Kafka.
These are the tools I am using. Jenkins is used for the CI process, as well as GitHub Action is used for the CI process.
As previously mentioned for alerts, we use Opsgenie and Grafana for the dashboards and premises.
Many third-party services, such as NGINX, are used in Kubernetes. We use Cube Metrics for these kinds of activities, such as metrics scraping.
I have worked with Ansible as well, however, if you asked me to compare the two, I would say Terraform is superior to Ansible. I am not going to get into specifics.
Terraform, is self-explanatory. It knows how to run, if we want to build some infrastructure, it understands where to start, how to start, what the dependencies are, and so on.
We must occasionally inform Terraform of some dependencies, which is fine. Terraform, on the other hand, already understands the sequence in which it must execute certain infrastructure to build up. Those are the advantages over Ansible.
The disadvantage of Terraform is that, once again, we must use functions to build up variables or something similar, but Terraform's dry notion is not very good.
When I say dry, I mean that you should not repeat the bad code. Other references are being used to handle this. That is something I would want to suggest.
How was the initial setup?
The initial setup is simple. It is not a difficult process to set up.
I would rate the initial setup a four out of five. it is easy.
When a new version is released, it is backward compatible. And I would say that is good in terms of Terraform maintainability. Normally, we don't have to make many changes, and backward compatibility is beneficial.
In terms of maintenance, it does not require a lot of attention.
What other advice do I have?
It's good, I would rate HashiCorp Terraform an eight out of ten.
Disclosure: I am a real user, and this review is based on my own experience and opinions.