If you’ve ever tried assembling IKEA furniture without looking at the instructions (we’ve all been there), you know how chaotic it can get. Terraform is no different—if you don’t follow the right workflow, you’ll end up with a cloud mess instead of a well-structured infrastructure.
Thankfully, Terraform has a straightforward workflow that helps you move from defining your infrastructure to deploying it seamlessly. In this post, we’ll break down the key steps of the Terraform workflow and how to use them like a pro!
Terraform Workflow: The Big Picture
Terraform follows a predictable pattern for managing infrastructure:
- Write: Define your infrastructure in Terraform configuration files.
- Initialize: Set up Terraform by downloading the necessary providers.
- Plan: Preview what Terraform will do before making changes.
- Apply: Deploy your infrastructure.
- Destroy: Clean up when needed.
You can think of it like baking a cake:
- You write the recipe (Write)
- Gather ingredients and preheat the oven (Initialize)
- Check if you have everything (Plan)
- Bake the cake (Apply)
- Eat the cake (and clean up after) (Destroy)
Let’s break each step down.
Step 1: Write Your Terraform Code
Terraform uses HCL (HashiCorp Configuration Language) to define infrastructure. Your .tf
files describe what you want to create.
Here’s a simple example that creates a resource group in Azure:
provider "azurerm" { features {} } resource "azurerm_resource_group" "example" { name = "myResourceGroup" location = "East US" }
Tip: Keep your Terraform code organized by separating providers, variables, and resources into different .tf
files.
Step 2: Initialize Terraform
Before you can use Terraform, you need to initialize it. This step:
- Downloads required provider plugins.
- Sets up the backend for storing state.
- Prepares Terraform for execution.
Run:
terraform init
Expected output:
Initializing provider plugins... Terraform has been successfully initialized!
Pro Tip: Always run terraform init
when starting a new project or changing provider versions.
Step 3: Plan Your Deployment
Before you apply any changes, you should preview them using terraform plan
.
Run:
terraform plan
Terraform will show you what it’s about to do—what resources will be created, modified, or destroyed.
Example output:
+ azurerm_resource_group.example will be created name: "myResourceGroup" location: "East US"
The + sign means Terraform will create the resource.
The ~
sign means Terraform will update an existing resource.
The -
sign means Terraform will destroy a resource.
Why It’s Important: Running terraform plan
first prevents accidental changes to your infrastructure!
Step 4: Apply Your Changes
Once you’re happy with the plan, apply the changes to actually create the infrastructure.
Run:
terraform apply
Terraform will ask for confirmation before proceeding:
Do you want to perform these actions? (yes/no)
Type yes, and Terraform will create your resources.
Expected output:
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Your cloud infrastructure is now live!
Step 5: Destroy Your Infrastructure (When Needed)
If you ever need to tear everything down, use:
terraform destroy
This will delete all resources created by Terraform. Useful for cleaning up after testing!
Confirmation prompt:
Do you really want to destroy all resources? (yes/no)
Type yes, and watch Terraform clean up.
Bonus: Automating the Terraform Workflow
If you’re working in a CI/CD pipeline, you can automate Terraform’s workflow:
- Run
terraform fmt
to format code. - Use
terraform validate
to check for syntax errors. - Use
terraform apply -auto-approve
for automated deployments.
For team collaboration, store the Terraform state remotely in Azure Blob Storage or Terraform Cloud.
Wrapping Up
The Terraform workflow is predictable and easy to follow once you get the hang of it. Whether you’re deploying a simple resource group or an entire cloud infrastructure, following these steps ensures smooth and error-free deployments.
Quick Recap:
- Write → Define infrastructure in
.tf
files. - Init → Initialize the project.
- Plan → Preview changes.
- Apply → Deploy resources.
- Destroy → Remove resources when needed.
Now, go forth and Terraform like a pro!
What’s Next?
In the next post, we’ll dive into Terraform variables and outputs, so you can build even more flexible and reusable configurations. Stay tuned!