Playing with Terraform has been on my To-Do list for a while now (it’s a long list 🙂 ). Over the past couple of weeks i’ve been spending time in my homelab getting familiar with it and figured i’d create a blog series that may help others.
So where do you start? There are lots of resources on the web to get started. From blogs to Pluralsight courses. The Terraform documentation & provider documentation in the Terraform Registry is also very good and usually has what you need.
For my setup i use Visual Studio Code. I flip between my mac & a windows jump vm in my homelab, and VSC works seamlessly on both. I’ve installed the following VSC extension:
Terraform Basic Constructs
Terraform uses the following basic constructs (there are plenty more advanced constructs but baby steps!)
- Plugins to interact with target endpoints
- User input to create objects
- There are multiple (6 i believe) ways to provide variables to Terraform
- Data Sources
- Sources of information outside of Terraform that provide infrastructure details to interact with resources
- Infrastructure objects you interact with
- Configuration files
- .tf file extension
- Read alphabetically and actioned when you plan/apply/destroy your config (more on that later)
- A single main.tf file can contain everything your infrastructure plan requires:
- Data Sources
- Recommended to split these out for larger environments
- You must declare required_providers and then a provider block for each provider.
- You can use alias = “alias_name” if you want to have multiple instances of a provider.
- In the screenshot below the credentials are coming from variables defined in my terraform.tfvars file
- List of variables to be used in the configuration
- Written in Hashicorp Configuration Language (HCL) (or JSON)
- Sensitive variables such as credentials or access keys should be stored in Terraform variable definition files .tfvars or stored as environment variables.
- Use a Terraform.gitignore file to ensure your .tfvars with sensitive information are not committed to your git repo.
- Data Sources & Resources can be in a single file or split out into logical infrastructure files
Once you have your configuration defined you first want to validate that it will run
terraform plan -out=plan-name # This will evaluate your configuration to ensure it is valid and store the result in a file called "plan-name"
terraform apply plan-name # This will apply your configuration based on the output of the above plan. You will be asked to confirm this action. you can add -auto-approve to skip the confirmation (use with caution)
terraform destroy # This will destroy the configuration. You will be asked to confirm this action. you can add -auto-approve to skip the confirmation (use with caution)
Hopefully this was helpful. This is just scratching the surface to get started with Terraform. I recommend getting hands on and reading the documentation as you go. I will continue this with a post on using the vSphere provider to deploy an OVA. Stay tuned!