Automating complex AWS bank infrastructures has saved months of manual work and improves delivery speed
What is our primary use case?
My main use case for HashiCorp Terraform is to provision infrastructure on AWS cloud. This is the main goal of my using Terraform.
I have completed multiple projects using HashiCorp Terraform for AWS infrastructure. One project is mostly related to bank infrastructure, which involved a multi-account setup, including VPC, shared resources within the shared account such as transit gateway, networking, and the compute was done on EKS, EC2, and some storage resources such as RDS, S3, EBS volumes, and encryption. I used KMS keys for security, adding more security using security groups, NACLs, and network firewall. There were many resources that I provisioned using Terraform for that project.
Those are mostly my use cases that are related to AWS infrastructure provisioning using HashiCorp Terraform.
What is most valuable?
HashiCorp Terraform offers excellent features that have greatly improved my experience. Every time I use Terraform, it makes my daily routine work easy since even a small change on multiple accounts can take much longer to do manually. Using Terraform, I can change four or five lines of code and it is all done. This saves my time and hard work, significantly improving my experience.
Infrastructure as Code is the most important feature that saves me the most time and makes my workflow smoother. State management is also an important aspect of this. I have used saving states on AWS cloud, so it was easily managed and properly used for my team.
HashiCorp Terraform has positively impacted my organization because we have standard code which we are using for multiple customers. This serves as our baseline. Most customers are using the same thing, so it saves a lot of time and effort. It makes things faster because we just need to make a few changes that are different for every customer. This is very helpful in bringing us revenue and helping us to be more productive in our work.
For example, if we had no baseline code for HashiCorp Terraform, provisioning every resource for very big projects, such as the bank project I completed, could take months of manual work, which could also have the possibility of errors due to human nature. Using Terraform, we saved those months of time and completed it within about a week. This has helped tremendously. We have a baseline now for the majority of use cases, and with little changes that can be done within hours or days, we can complete work that could take months if done manually.
What needs improvement?
There can be improvements in HashiCorp Terraform. There are times when a small error can ruin very valuable resources. In that case, exception handling in development can improve the overall Terraform productivity.
The documentation for HashiCorp Terraform is one of the best, and I appreciated it. However, there can be improvements for when Terraform destroy can destroy useful and very important resources such as databases. In those critical places, there should be a special prompt that informs the user so that the user can double-check what they are going to do with Terraform plan. That can be a technical improvement. Other than that, documentation is comprehensive and easy to understand.
For how long have I used the solution?
Since the beginning of my career, I have been using HashiCorp Terraform, starting as a trainer and then working in a production-level environment. Overall, I have been using this tool for four and a half years.
What do I think about the stability of the solution?
HashiCorp Terraform is stable in my experience.
What do I think about the scalability of the solution?
I would rate HashiCorp Terraform's scalability positively because it covers most of the resources that I use daily in my work, specifically on AWS cloud. It has most of the resources covered, so I would say it is good at scaling.
Which solution did I use previously and why did I switch?
Before using HashiCorp Terraform, I had my own scripts using Python and shell, but those were not in a productivity sense in competition with Terraform. Terraform is much easier to use and much faster, allowing me to deploy using Terraform. The custom scripts were highly dependent on future changes.
I am aware of Ansible, but I have never used it for provisioning infrastructure. I have used it for configuration management on the provisioned infrastructure.
How was the initial setup?
I used the free version of HashiCorp Terraform with no setup cost or licensing needed.
What was our ROI?
I have seen a return on investment with HashiCorp Terraform. It saved us a lot of time. However, I used the free version and did not go with the licensing or the paid version.
What's my experience with pricing, setup cost, and licensing?
I used the free version of HashiCorp Terraform with no setup cost or licensing needed.
Which other solutions did I evaluate?
I am aware of Ansible, but I have never used it for provisioning infrastructure. I have used it for configuration management on the provisioned infrastructure.
What other advice do I have?
I would advise others looking into using HashiCorp Terraform to review its documentation and understand how the inputs and outputs are interlinked, and how the use of Terraform can be compatible with the use cases.
I am very satisfied with HashiCorp Terraform. I would give this product a rating of 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)
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)