Terraform
Terraform is a tool for building, changing, and versioning infrastructure, and provides components and documentation for building Safe Health resources.
Terraform is HashiCorp’s Infrastructure as Code. It allows one to describe a Desired State. By deploying it Terraform will make the necessary changes to make sure that the Current State matches the Desired State.
Desired State
With Terraform the Desired State is described using HCL1.
Former2 is a great tool to create such a file from an existing infrastructure.
State File
Terraform makes use of a State File. Whenever it deployed a Desired State, it will save it in the State File. If the Desired State is (changed and) deployed Terraform will not actually compare the Desired State to the Current State, but to the State File.
Advantages
Having a State File has some advantages:
- It is much easier to compare the
Desired Stateto a local file (theState File, than it is to the realCurrent State, because the latter will involve a lot of API calls to the IaaS or DCaaS layer. - The
State Filecan also be parsed by other tools, which gives them an easy to read model of what the infrastructure currently looks like.
Disadvantages
Having a State File also has some disadvantages:
- The
State Filemust be stored on Shared Storage, and it can never get lost, or it would break Infrastructure as Code. These requirements are not easily met. - Nothing and nobody else can make changes to the infrastructure outside of
Terraform. If changes are made, they will NOT be detected byTerraform, which results in an infrastructure that does NOT match theDesired State, although everything seems to be saying it is.
HashiCorp Configuration Language ↩︎