Terraform - Learning Some Basics

During the last couple of months I've been working on a new project which has given me the opportunity to delve back into Terraform. I first took a look at Terraform in late 2020 while doing some research around automating VMware Validated Solutions, at the time there were far too many gaps in the providers which made it difficult to justify its use to deliver end to end automation with very short time scales. Jumping forward to today, there has been a lot of traction over the last 24 months with new providers being released as well as enhancements to existing providers and with less time pressures its felt like a good time to roll up my sleeves and dig deeper into what Terraform can do for me now.

I'm not a Terraform expert by any stretch of the imagination and I certainly don't pretend to be one, and in truth its taken me a while to get my head around the Terraform concepts but the idea of this post is to try and share what I've learnt by explaining in a way that has made sense to me. Hopefully it will help others at least get their heads around the basics and allow them to flourish in their development of Terraform plans.

Terraform Install

First things first, you will need to intsall Terraform on your operating system of choice. For this I would recommend using the Terraform documentation where you will find a number of methods that can be followed.

Terraform Concepts

Let's now take a look at some basic concepts, this is not an exhaustive list but should be enough to get you going.

  • Files and Directories

    Terraform code is stored as plain text within files that have a .tf file extension. All files are kept together within a single directory which is referred to as a module and Terraform evaluates all of these configuration files treating the entire module as a single document.


    Tip

    Use Terraform's ability to read multiple .tf files as part of the module, this allows you to split out elements of the code into smaller and easier to manage files.


  • Resources

    A resource describes the infrastructure object being created or modified and as such are considered the most important element.

  • Data Sources

    Data sources relate to objects defined outside of Terraform.

  • Providers

    Providers are referred to as plugins which are used to interact with the infrastructure, each provider adds a set of resource types and/or data sources that Terraform can manage.

    Without providers, Terraform can't manage any kind of infrastructure, they are distributed separately from Terraform itself.

  • Variables and Outputs

    Input variables allow you to customize the code without making changes to the source code. Output values are used to return values from the code which can be used by other modules. Terraform also has the concept of temporary variables which are referred to as local variables.

  • Built in Functions

    The Terraform language includes a number of built-in functions which can be called to transform and combine values.

    Terraform CLI

The command line interface (CLI) to Terraform is via the terraform command, which accepts a variety of subcommands such as terraform init or terraform plan. For a full breakdown of Terraform CLI commands refer to the the Terraform CLI Documentation but here are a few common ones you should get familiar with:

  • Validates the configuration files in a directory, referring only to the configuration and not accessing any remote services such as remote state, provider APIs

    1terraform validate
    
  • Formats the configuration files to a canonical format and style

    1terraform fmt
    
  • Initialize a working directory containing Terraform configuration files

    1terraform init
    
  • Creates an execution plan, which lets you preview the changes that Terraform plans to make to your infrastructure

    1terraform plan -out=tfplan
    
  • Executes the actions proposed in a Terraform plan

    1terraform apply tfplan
    
  • Destroys all remote objects managed by a particular Terraform configuration

    1terraform destroy
    

Conclusion

In this post we have only scratched the surface of Terraform, but if you can get your head around these basics as you start playing with Terraform yourself you will quickly become familar with additional functionality and will be writing more complex Terraform code in no time.

Posts in this Series