So why Terraform? When I first started looking into which provisioning solution to use (Terraform, CloudFormation, Chef, Ansible, etc.). I did not have very much background and in hindsight I think I made an uninformed yet great decision. Rather than rehash all of the basics of what is the difference between Configuration Management vs Provisioning and Mutable Infrastructure vs Immutable Infrastructure I'm going to hit on some things I missed or did not value enough while reading up to make my decision.
Cloud Agnostic
I discounted this detail far more than I should have in my decision between CloudFormation and Terraform. We are primarily an AWS house why do we care?? Well it's not just being able to provision Azure and AWS in the same code. The value is in tying in all your 3rd part providers to your Terraform managed infrastructure. Odds are you use some of these services (community providers) that do not exist in the AWS world and it's nice to be able to pull them in without custom built provisioning or another solution all together. Just to be clear though Terraform does not get you out of vendor lock in. It's not as easy as switching out the provider to switch an EC2 instance in Azure. The providers are very custom for each Cloud and require an understanding of each.
Ease of Use
This is probably my biggest point to make with this post. In my opinion Terraform is incredibly easy to read and understand. This is partly due to the custom language, so everything doesn't have to fit into JSON or YAML. One could argue the difference is negligible, but I think it matters. Secondly, the docs for Terraform are fantastic. I have never found AWS docs particularly friendly even though the information is certainly all there. This is especially important because I guarantee you will have ten different docs references open as you write out these specs. Lastly, I generally find that terraform has very useful and descriptive errors which is good because you will have a lot of them.
Conclusion
Those are just some of the reasons why I love Terraform now that I'm waist deep in it. I certainly do not have enough experience to claim its superior to the alternatives but if you're looking to jump into IaC I can say from experience that Terraform is a great/user friendly place to start. I would love to hear your experiences as well.
Test
oh yeah