Has automated multi-cloud deployments and simplified infrastructure management with reusable modules
What is our primary use case?
The usual use cases for HashiCorp Terraform that I work with mostly include automating tasks such as provisioning resources and creating resources over the clouds. If we want to create an EC2 instance on AWS, we have to log into EC2 and follow specific steps for creating instances. Creating thousands of EC2 instances with the same configuration requires repeating those steps, which can lead to mistakes. But using HashiCorp Terraform helps us by enabling infrastructure as code, allowing us to create infrastructure using code.
We can write simple code, and based on that, we can create multiple instances with a single run of code.
HashiCorp Terraform also supports multi-cloud developments, allowing us to work with AWS, Azure, Google, and Oracle simultaneously. It enables immutable infrastructure, and after HashiCorp Terraform creates resources, a state file is generated that stores metadata, which we can control using version control, allowing us to revert to previous versions if needed.
What is most valuable?
The most valuable features or capabilities of HashiCorp Terraform include automation, multi-cloud support, version control of state files, environment management, and support for third-party services such as databases and monitoring.
The open-source nature of HashiCorp Terraform is important for accessing community contributions and tools as it is free to use. The community-driven development means there is a large and active community of contributors worldwide. HashiCorp Terraform works with multiple providers such as AWS, Azure, and GCP, and it can also support custom providers, which is a significant advantage.
What needs improvement?
HashiCorp Terraform could be improved by enhancing security around state files, as it stores sensitive information such as passwords and secrets within them. If someone acquires a state file, they can access those secrets. HashiCorp Terraform should implement better security measures to keep sensitive information hidden from unauthorized users.
For how long have I used the solution?
I have been working with HashiCorp Terraform for more than three years.
What do I think about the stability of the solution?
HashiCorp Terraform is stable and reliable as long as we maintain the state file correctly.
What do I think about the scalability of the solution?
HashiCorp Terraform's scalability is straightforward because we can utilize a variable called count to scale our resources easily.
Which solution did I use previously and why did I switch?
Before HashiCorp Terraform, I did not use a different solution for the same use cases. AWS has a service called CloudFormation that performs similar functions, but it is specific to AWS. However, HashiCorp Terraform is applicable worldwide, and I haven't used anything else, so I don't have experience with other solutions.
How was the initial setup?
I participated in the initial setup and deployment of HashiCorp Terraform. Knowing the requirements is essential for what we need to create using HashiCorp Terraform. If we're beginners, it's necessary to follow HashiCorp's documentation to understand what is needed, allowing us to create Terraform modules and files easily. For me, it isn't a big deal; we just need to gather and analyze the necessary information to proceed.
What other advice do I have?
We have developed one solution using HashiCorp Terraform.
HashiCorp Terraform's state management capabilities are the main key point because whatever HashiCorp Terraform creates is stored in a state. Managing this state file is crucial. We can manage it either locally or remotely, but using local storage can lead to failures, and we might lose our state file.
Best practice is to store it remotely, such as on AWS S3 or Azure storage blobs, and we must maintain versions of the state file. This allows us to revert to previous states in version control if there are issues with the current state.
HashiCorp Terraform's modular architecture is beneficial because I have created a module for EC2 instances. When a team member wants to create an EC2 instance, they can utilize my module without recreating it. This approach follows the DRY principle (do not repeat yourself), achieving simplicity and reducing code repetition.
On a scale of one to ten, I rate HashiCorp Terraform an eight out of ten.
Which deployment model are you using for this solution?
Public Cloud
If public cloud, private cloud, or hybrid cloud, which cloud provider do you use?
Amazon Web Services (AWS)
Infrastructure management benefits from declared creation and consistent procedures
What is our primary use case?
At Remessa, we use HashiCorp Terraform for everything involving infrastructure. We use HashiCorp Terraform to manage our repository on GitHub, to manage permissions, invitations, and teams. We use HashiCorp Terraform to manage our AWS infrastructure, DNS, policies on Cloudflare. We use HashiCorp Terraform to manage our alerts on PagerDuty, and we set up some things on Grafana with other services.
We use GitOps, so when we need to make changes such as upgrading our databases when a new Postgres version is released, we can see the version of each database that worked, allowing us to manage the process effectively. We can see in the state that our main database will be upgraded immediately. We can prevent breaks or issues because of the states, which allows us to schedule a window time for upgrades when needed.
What is most valuable?
HashiCorp Terraform operates on a declarative rather than imperative approach. This enables us to repeat processes and creation, which is the greatest advantage because we can test. If something doesn't work, we can do a rollback or change everything, and using Git, we have the history of every change. We can pick a change in the history tree to discuss and see what changed.
Our infrastructure has a repository with HashiCorp Terraform, and we have modules for that. The benefit is the concept of not repeating yourself, so we have an instance that we can use to create a new instance or cluster as quickly and correctly as possible. Everything works the same way. We don't have servers running on different systems such as Ubuntu, Red Hat, or Debian. Everything is uniform, so we don't need to think about different ways to create, manage, or access. The benefit of this uniformity is significant.
We utilize HashiCorp Terraform's state management capabilities.
What needs improvement?
Two aspects of HashiCorp Terraform could be improved: it should have better included tests and a more precise validator. I have faced issues where I needed to create something in a particular way and wanted to validate if everything was working properly, but the validator is not a strong point of HashiCorp Terraform.
Using HashiCorp Terraform Cloud is straightforward, but using other backends such as AWS S3 or Oracle Object Store is not as straightforward. Working with modules can be complex. However, when using HashiCorp Terraform's modules, you're typically a more advanced user, so this complexity isn't problematic.
For how long have I used the solution?
I have been working with HashiCorp Terraform for five years.
What do I think about the stability of the solution?
HashiCorp Terraform is extremely stable. I faced an issue once in five years where the way I declared the resource was correct, but I had problems with the binary. When I investigated the problem, the community had created an issue, and they released patches the next day. It has been totally stable with only one minor issue in five years.
What do I think about the scalability of the solution?
Given it's in the cloud, HashiCorp Terraform is very much scalable.
Which other solutions did I evaluate?
When HashiCorp Terraform changed their license version, I considered migrating to another similar tool. However, after understanding the changes, I decided to continue using it since it remained open source, with restrictions only for HashiCorp competitors. This was crucial for me as I only work with open-source solutions.
All my colleagues in the company shared the same concern, and we studied migrating from HashiCorp Terraform because of the license change. I have experience with alternatives such as Crossplane, which I studied once and wanted to test. There is also OpenTofu, a fork of HashiCorp Terraform, which I tested a few times.
I continue using HashiCorp Terraform because the HashiCorp Language (HCL) is excellent to work with. The syntax is clear, and we have numerous resources and examples. Usually, I can find examples of what I want to create from other users' implementations. The benefits are the language, syntax, agility, and velocity. HashiCorp Terraform works effectively even with complex infrastructures.
What other advice do I have?
To others considering HashiCorp Terraform, planning the infrastructure is key, including drawing out the idea. Using HashiCorp Terraform is straightforward, but migrating everything to modules or reworking on HashiCorp Terraform can be complicated and overwhelming. Think thoroughly before implementation, but don't hesitate to try it. All necessary information is available online, and the community is excellent.
On a scale of one to ten, I would rate HashiCorp Terraform as a solution nine out of ten.
Which deployment model are you using for this solution?
Public Cloud
If public cloud, private cloud, or hybrid cloud, which cloud provider do you use?
Amazon Web Services (AWS)
The solution provides a reliable deployment approach that puts it ahead of its competition
What is our primary use case?
The solution is a success code. We use open-source software.
What is most valuable?
The first thing I like about the solution is that it keeps a version of your infrastructure. And you always have, for example, the bill of materials with what it produces in terms of YAML files that you can manipulate and understand exactly what infrastructure you deploy, what is active, and what is not. We use it with the Amazon database, where the solution does not deploy the second time if somebody triggers a build or deployment. Apart from those features, the fact that you have your infrastructure on code is tremendous.
What needs improvement?
It would be nice if they could put our infrastructure on graphics or at least provide a map of our infrastructure, especially with links, to see what it looks like graphically. That way, we could understand the relationship between all the machines. That helps with redundancy purposes, where, for example, if we need to create redundancies to create high availability for some services, we could look at the map directly.
For how long have I used the solution?
I've worked with the solution for three or four years.
What do I think about the stability of the solution?
The solution works very well every time. It calls APIs from Amazon, so it's always up to date. I rate the solution's stability a nine out of ten because we never had a problem.
What do I think about the scalability of the solution?
I rate the solution's scalability an eight out of ten. It's pretty scalable on the Amazon cloud. We have around three or four users on the solution.
How are customer service and support?
HashiCorp's technical support is very good. They know what they're talking about.
How was the initial setup?
The initial setup is really simple. We just created YAML files with what we needed, and somebody deployed machines and load balancers. It's just a binary we needed to place anywhere.
We deployed the solution on Amazon's cloud. For the AKS cluster, we just launched Terraform, which region and which kinds of machines we wanted to install.
Which other solutions did I evaluate?
Terraform's philosophy is different, but Ansible is a similar product. It's not the same, though you can also deploy virtual machines, for example. However, I would not use Ansible because it does not have the same features as Terraform when it comes to history. Terraform pulls the API first to understand what you have from your schema and compare it with your existing infrastructure.
Ansible would not do that. It would just execute the code and deploy without knowing what it does.
What other advice do I have?
We don't use Terraform in a very fancy way. The solution did not have a difficult use case, nor did we go into a specific feature of Terraform that we tested very thoroughly. We used it in a basic way, simply trying not to run the same script twice or by two people simultaneously.
I rate HashiCorp Terraform a nine out of ten and recommend it to everyone.
Which deployment model are you using for this solution?
Public Cloud
If public cloud, private cloud, or hybrid cloud, which cloud provider do you use?
Amazon Web Services (AWS)