Overall Satisfaction with Terraform
We are using Terraform to manage our entire environment as a code. We're controlling it with VCS (in our case, Github) and performing a good automation process with Puppet and Jenkins. Terraform helps us to achieve that in a quite organized way, structured and reliable. Furthermore, we now have versioning of our environment allowing us to have more control about how things change, how that was performed, and in the case of a mistake, it is quite easy to rollback.
- The Terraform files would be considered as documentation since our entire environment is described there.
- Terraform will manage the state of your environment, that means, if something is not in conformity, it will try to fix keeping as close as possible of the desired state.
- With Terraform, you can manage different cloud environments at the same configuration files. That is really useful when you need to handle with different cloud providers.
- The way Terraform manages variables is a bit annoying. Sometimes we need to declare the same variable in more the one file. So far, this doesn't make sense for me.
- Due to the speed, as new AWS products are released, if we want to work with something new, we need to wait for a new version with this new feature be released.
- As with most DevOps tools, Terraform has its own DSL language and will require time to learn the product for you feel confident in its usage.
- Our deployments are more reliable. This way we avoid having unexpected outages due to misconfiguration performed manually.
- Agility. While doing this using our previous way, we used to spend hours to deploy a new environment. With Terraform it is just a few minutes.
- Better control! We can track every single change in our environment by our control versioning system.
Actually, Terraform performs pretty well. The main delay came from the cloud providers and the time they take to perform API calls.
Terraform has an API which allows us to create integration among different products. This API is well documented on the main website and we can integrate it in different ways.
Two scenarios I can describe Terraform as an amazing option are when you have a complex (or not) cloud environment which needs to be deployed and destroyed frequently in different regions. Using Terraform you can do that using just one command line. You'll spend some time designing the config files, but you'll save a huge amount of time every time you need to deploy this same environment. Furthermore, you can create those scripts parametrized, in a way that you can give a few parameters allowing some flexibility. The second case is when you have the same environment in different cloud providers. You can manage them using just one resource.