

init
– Init. Initialize the (local) Terraform environment. Usually executed only once per session.plan
– Plan. Compare the Terraform state with the as-is state in the cloud, build and display an execution plan. This does not change change the deployment (read-only).apply
– Apply the plan from the plan phase. This potentially changes the deployment (read and write).destroy
– Destroy all resources that are governed by this specific terraform environment.
Terraform workflow

Step – 1 – Install terraform
Step – 2 – Decide a providers name which you want to work with?
- Create one directory under your workspace
- Inside directory, create one file called “providers.tf”
- Content of the providers.tf are as follow
- run init command to download aws providers. $ terraform init
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.61.0"
}
github = {
source = "integrations/github"
version = "5.18.3"
}
}
}
provider "aws" {
region = "us-east-1"
access_key = ""
secret_key = ""
}
provider "github" {
# Configuration options
}
Step – 3 – Create 1 AWS ec2 instance using Terraform
- Create aws.tf file in the same directory where providers.tf is located
- Put the following content. Modify AMI id as per your region
resource "aws_instance" "web" {
ami = "ami-007855ac798b5175e"
instance_type = "t2.micro"
tags = {
Name = "HelloWorld-DevOpsSchool"
}
}
Step – 4 – PLAN (DRY RUN) using terraform plan
- RUN a Dry run command $ terraform plan

Step – 5 – APPLY (Create a Resoureces) using terraform apply
- Run apply command to create resources $ terraform apply


Step – 6 – Verify a AWS ec2 instance at AWS

Step – 7 – APPLY (Update a Resoureces) using terraform apply
- Update tag info in your aws.tf code
- Run $ terraform apply
resource "aws_instance" "web" {
ami = "ami-007855ac798b5175e"
instance_type = "t2.micro"
tags = {
Name = "HelloWorld-Terraform"
}
}

Step – 8 – Terraform show

Check Statefile in the same directory

Step – 9 – Terraform destroy

Check AWS Account if AWS ec2-instance is destroyed or not










I’m a DevOps/SRE/DevSecOps/Cloud Expert passionate about sharing knowledge and experiences. I am working at Cotocus. I blog tech insights at DevOps School, travel stories at Holiday Landmark, stock market tips at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at I reviewed , and SEO strategies at Wizbrand.
Please find my social handles as below;
Rajesh Kumar Personal Website
Rajesh Kumar at YOUTUBE
Rajesh Kumar at INSTAGRAM
Rajesh Kumar at X
Rajesh Kumar at FACEBOOK
Rajesh Kumar at LINKEDIN
Rajesh Kumar at PINTEREST
Rajesh Kumar at QUORA
Rajesh Kumar at WIZBRAND