DevOps person
February 15, 2017

DevOps person

Deepshikha Gandhi | TrustRadius Reviewer
Score 8 out of 10
Vetted Review
Verified User

Overall Satisfaction with Terraform

Terraform is being used by our DevOps team to manage mainly our AWS infrastructure as code. It enables us to collaborate, automate and share pieces of our cloud infrastructure amongst and across teams. Terraform enables us to maintain reproducible, shareable and version-controlled infrastructure and deployments as compared to the older methodology of owning and configuring machines by hand.
  • Ability to "plan" and "apply" configs. Plans show us what changes will take place - so it's like a no-op safe mode dry-run. Apply actually executes the changes.
  • Terraform has providers for most major infrastructure providers like AWS, VMWare, OpenStack
  • Ability to use the same code/configs to provision different environments - QA, staging and production
  • Ability to create modules and share them between services
  • Terraform uses it's own DSL called the Hashicorp Configuration Language which takes some getting used to.
  • Terraform state files store secrets in plain text which is a bad idea when you push it to version-control.
  • Multiple teammates working simultaneously on a single state file is a problem. It's easy to forget to push or pull the latest state. Also version control systems like Git don't have a way of locking a file.
  • Quick turnaround time for spinning new infrastructure
  • We now have readable and documentable infrastructure which can be version controlled
  • Hooking up Terraform with CI/CD tools like Jenkins has enabled us to build a pipeline for continuous testing and delivery
  • Cloudformation
Terraform shares the methodology of creating configuration files for your infrastructure with tools like CloudFormation. However, Terraform is cloud-agnostic unlike CloudFormation which is AWS specific.
Terraform can be used to maintain AWS and OpenStack clusters simultaneously. You can use the same syntax instead of running non-interoperable tools for each of them.
Terraform also empowers you to test/dry-run your changes before actually applying by running "terraform plan", so you can apply with confidence.
If you have environments that change a lot and you need ephemeral systems on the fly to test your code releases, Terraform is the tool for you. Maintaining different environments like staging and QA before releasing to production is also easy as you can use the same code and configs for all three. Terraform also makes it easy to destroy these environments when they become obsolete.