#90DaysOfDevOps - An intro to Terraform - Day 57
An intro to Terraform
"Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently"
The above quote is from HashiCorp, HashiCorp is the company behind Terraform.
"Terraform is an open-source infrastructure as code software tool that provides a consistent CLI workflow to manage hundreds of cloud services. Terraform codifies cloud APIs into declarative configuration files."
HashiCorp have a great resource in HashiCorp Learn which covers all of their products and gives some great walkthrough demos when you are trying to achieve something with Infrastructure as Code.
All cloud providers and on prem platforms generally give us access to management consoles which enables us to create our resources via a UI, generally these platforms also provide a CLI or API access to also create the same resources but with an API we have the ability to provision fast.
Infrastructure as Code allows us to hook into those APIs to deploy our resources in a desired state.
Other tools but not exclusive or exhaustive below. If you have other tools then please share via a PR.
Cloud Specific | Cloud Agnostic |
---|---|
AWS CloudFormation | Terraform |
Azure Resource Manager | Pulumi |
Google Cloud Deployment Manager |
This is another reason why we are using Terraform, we want to be agnostic to the clouds and platforms that we wish to use for our demos but also in general.
Terraform Overview
Terraform is a provisioning focused tool, Terraform is a CLI that gives the capabilities of being able to provision complex infrastructure environments. With Terraform we can define complex infrastructure requirements that exist locally or remote (cloud) Terraform not only enables us to build things initially but also to maintain and update those resources for their lifetime.
We are going to cover the high level here but for more details and loads of resources you can head to terraform.io
Write
Terraform allows us to create declaritive configuration files that will build our environments. The files are written using the HashiCorp Configuration Language (HCL) which allows for concise descriptions of resources using blocks, arguments, and expressions. We will of course be looking into these in detail in deploying VMs, Containers and within Kubernetes.
Plan
The ability to check that the above configuration files are going to deploy what we want to see using specific functions of the terraform cli to be able to test that plan before deploying anything or changing anything. Remember Terraform is a continued tool for your infrastructure if you would like to change aspect of your infrastructure you should do that via terraform so that it is captured all in code.
Apply
Obviously once you are happy you can go ahead and apply this configuration to the many providers that are available within Terraform. You can see the large amount of providers available here
Another thing to mention is that there are also modules available, and this is similar to container images in that these modules have been created and shared in public so you do not have to create it again and again just re use the best practice of deploying a specific infrastructure resource the same way everywhere. You can find the modules available here
The Terraform workflow looks like this: (taken from the terraform site)
Terraform vs Vagrant
During this challenge we have used Vagrant which happens to be another Hashicorp open source tool which concentrates on the development environments.
-
Vagrant is a tool focused for managing development environments
-
Terraform is a tool for building infrastructure.
A great comparison of the two tools can be found here on the official Hashicorp site
Terraform Installation
There is really not much to the installation of Terraform.
Terraform is cross platform and you can see below on my Linux machine we have several options to download and install the CLI
Using arkade
to install Terraform, arkade is a handy little tool for getting your required tools, apps and clis onto your system. A simple arkade get terraform
will allow for an update of terraform if available or this same command will also install the Terraform CLI
We are going to get into more around HCL and then also start using Terraform to create some infrastructure resources in various different platforms.
Resources
I have listed a lot of resources down below and I think this topic has been covered so many times out there, If you have additional resources be sure to raise a PR with your resources and I will be happy to review and add them to the list.
- What is Infrastructure as Code? Difference of Infrastructure as Code Tools
- Terraform Tutorial | Terraform Course Overview 2021
- Terraform explained in 15 mins | Terraform Tutorial for Beginners
- Terraform Course - From BEGINNER to PRO!
- HashiCorp Terraform Associate Certification Course
- Terraform Full Course for Beginners
- KodeKloud - Terraform for DevOps Beginners + Labs: Complete Step by Step Guide!
- Terraform Simple Projects
- Terraform Tutorial - The Best Project Ideas
- Awesome Terraform
See you on Day 58