Terraform lets you manage your server architecture using code, a concept called Infrastructure as Code (IaC). It’s declarative, meaning you don’t have to code each step; simply define the final setup you want, and Terraform takes care of the rest.
It lets you build, modify, and update and delete your cloud infrastructure using code.
Why Terraform?
Multi-Cloud Support
Works with all the major providers like AWS, GCP, Azure, and more, so you can manage everything from one place.
Stateful Management
Terraform remembers your infrastructure’s state, so updates are smoother, and everything stays in sync.
Version Control
You can keep Terraform configs in Git, making it easy to work with your team and track every change.
Declarative Approach
Just tell Terraform what you want it handles adding, deleting, and updating automatically.
Less Manual Work
Once you’ve set it up, you can reuse it anytime. No more clicking around for every setup, which saves time (and sanity).
Cost-Efficient
Terraform makes it easy to start and stop resources, so you’re only paying for what you actually need.
Disaster Recovery
If things go south, you can bring everything back with just a command or two. Fast recovery without the stress.
Fewer Errors
Writing your setup as code cuts down on manual steps (and mistakes), which means more reliable deployments overall.
Prerequisites
I prefer using winget, a package manager for Windows similar to apt on Ubuntu. Below are the winget commands for quick installation. Alternatively, you can use the linked resources:
- Terraform: 📎Download Link
Once Terraform is installed, you can verify with the command# winget command (skip if you already downloaded using the link) winget install -e --id Hashicorp.Terraform
you should see an output asterraform --versionTerraform v1.9.8 on windows_amd64 - AWS CLI: 📎Download Link
Since we’re working with AWS, I’m installing the AWS CLI to interact with our AWS services directly from the command line. This makes it easier to configure, manage, and verify resources as we go along.# winget command (skip if you already downloaded using the link) winget install -e --id Amazon.AWSCLI
Configuring AWS
After installation, use the following command to configure AWS:
aws configureThis will prompt you to enter your AWS Access Key, Secret Key, default region, and output format. Enter these details to complete the setup. For a more detailed guide, see 📎this tutorial on Medium.
To verify your configuration, navigate to the .aws directory and view the credentials file:
cd .aws
cat credentials # On Linux/Macor on Windows:
cd .aws
notepad credentialsYou should see a [default] section with the aws_access_key_id and aws_secret_access_key you entered:
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY Writing Your First Terraform Code
Now that everything is set up, let’s write our first Terraform code!
Start by creating a new folder for your project, then open it in your preferred code editor (I’m using Visual Studio Code here). Inside this folder, create a file with the .tf extension this is where you’ll write your Terraform configurations. For better coding support, like IntelliSense, I recommend installing the Terraform extension in Visual Studio Code to make writing and troubleshooting your code even easier.
extension Name: HashiCorp Terraform
Id: hashicorp.terraform
Description: Syntax highlighting and autocompletion for Terraform
Version: 2.33.0
Publisher: HashiCorp
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=HashiCorp.terraform Let's Try Creating a Simple EC2 Instance Using Terraform
I’ve added a code snippet below to set up a basic EC2 instance. You can adjust it to fit your needs or check the 📎Terraform Documentation to create your own configuration. Just pick your provider for specific references.
provider "aws" {
profile = "default"
region = "ap-south-1"
}
resource "aws_instance" "terraform-demo" {
ami = "ami-08bf489a05e916bbd"
instance_type = "t2.micro"
tags = {
Name = "TestTerraformInstance"
}
} Code Breakdown
Provider block
provider"aws": Defines AWS as the provider here, but you could switch to any cloud provider that Terraform supports.profile = "default": Tells Terraform to use the default AWS profile on your system. Remember, we saw[default]in thecredentialsfile when we usedcatornotepadto check the AWS configuration.region = "ap-south-1": Specifies the AWS region for this deployment (in this case, it’s Mumbai, Asia Pacific).
Resource block
resource "aws_instance" "terraform-demo": Here,resourcetells Terraform that we’re referring to an AWS resource, andaws_instanceis the identifier for an EC2 instance in AWS."terraform-demo"is just the name we’re giving it within Terraform so we can refer to it easily in our configuration.ami = "ami-08bf489a05e916bbd": Sets the Amazon Machine Image (AMI) ID, which specifies the OS for this instance.instance_type = "t2.micro": Defines the instance type ast2.micro, which is a general-purpose, low-cost instance.tags: Lets you tag the instance with metadata; here, it’s named"TestTerraformInstance"so it’s easier to identify.".
Now that we’ve finished the configuration, let’s execute it and see if it works! Remember, we installed Terraform, which gives us a few key commands. You can check them all by running:
terraform --helpHere are some main commands to know:
Main commands:
init Prepare your working directory for other commands
validate Check whether the configuration is valid
plan Show changes required by the current configuration
apply Create or update infrastructure
destroy Destroy previously-created infrastructureTo get started, we first need to run:
terraform initThis command will set up the necessary configurations for the AWS provider, creating a .terraform folder with files like:
terraform
┣ .terraform
┃ ┗ providers
┃ ┃ ┗ registry.terraform.io
┃ ┃ ┃ ┗ hashicorp
┃ ┃ ┃ ┃ ┗ aws
┃ ┃ ┃ ┃ ┃ ┗ 5.75.1
┃ ┃ ┃ ┃ ┃ ┃ ┗ windows_amd64
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ LICENSE.txt
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ terraform-provider-aws_v5.75.1_x5.exe
┣ .terraform.lock.hcl
┣ main.tf
┣ terraform.tfstate
┗ terraform.tfstate.backupOnce the command finishes executing, you should see something like this:
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.After this setup, you can run:
terraform applyThis command will prompt for the confirmation enter yes and it will apply your configuration and create the new instance on AWS. If you want to make any changes later, just edit the config and run terraform apply again the changes will be applied to the instance automatically without any extra effort.
To take down the instance, just run:
terraform destroyBoom! The instance we created will be deleted. It’s really that simple!
Conclusion
I hope this blog gave you a solid introduction to Terraform and got you thinking about all the possibilities. With Terraform, the only limit is your imagination! It’s a powerful tool in the DevOps toolkit that makes managing infrastructure simpler and more efficient. And with the rise of AI, writing Terraform scripts will only get easier. You can even use AI to help generate configurations based on your specific application needs, making automation faster and smarter. Happy building and automating!