Skip to content

Terraform Settings, Providers & Resource Blocks

Step-01: Introduction

Step-02: In - Create Terraform Settings Block

terraform {
  required_version = "~> 0.14" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"

Step-03: In - Create Terraform Providers Block

  • Understand about Terraform Providers
  • Configure AWS Credentials in the AWS CLI if not configured
# Verify AWS Credentials
cat $HOME/.aws/credentials
# Provider Block
provider "aws" {
  region  = us-east-1
  profile = "default"

Step-04: In - Create Resource Block

# Resource: EC2 Instance
resource "aws_instance" "myec2vm" {
  ami = "ami-0533f2ba8a1995cf9"
  instance_type = "t3.micro"
  user_data = file("${path.module}/")
  tags = {
    "Name" = "EC2 Demo"

Step-05: Review file

#! /bin/bash
# Instance Identity Metadata Reference -
sudo yum update -y
sudo yum install -y httpd
sudo systemctl enable httpd
sudo service httpd start  
sudo echo '<h1>Welcome to StackSimplify - APP-1</h1>' | sudo tee /var/www/html/index.html
sudo mkdir /var/www/html/app1
sudo echo '<!DOCTYPE html> <html> <body style="background-color:rgb(250, 210, 210);"> <h1>Welcome to Stack Simplify - APP-1</h1> <p>Terraform Demo</p> <p>Application Version: V1</p> </body></html>' | sudo tee /var/www/html/app1/index.html
sudo curl -o /var/www/html/app1/metadata.html

Step-06: Execute Terraform Commands

# Terraform Initialize
terraform init
1) Initialized Local Backend
2) Downloaded the provider plugins (initialized plugins)
3) Review the folder structure ".terraform folder"

# Terraform Validate
terraform validate
1) If any changes to files, those will come as printed in stdout (those file names will be printed in CLI)

# Terraform Plan
terraform plan
1) No changes - Just prints the execution plan

# Terraform Apply
terraform apply 
terraform apply -auto-approve
1) Create resources on cloud
2) Created terraform.tfstate file when you run the terraform apply command

Step-07: Access Application

  • Important Note: verify if default VPC security group has a rule to allow port 80
# Access index.html

# Access metadata.html

Step-08: Terraform State - Basics

  • Understand about Terraform State
  • Terraform State file terraform.tfstate
  • Understand about Desired State and Current State

Step-09: Clean-Up

# Terraform Destroy
terraform plan -destroy  # You can view destroy plan using this command
terraform destroy

# Clean-Up Files
rm -rf .terraform*
rm -rf terraform.tfstate*

Step-10: Additional Observations - Concepts we will learn in next section

  • EC2 Instance created we didn't associate a EC2 Key pair to login to EC2 Instance
  • Terraform Resource Argument - Key Name
  • AMI Name is static - How to make it Dynamic ?
  • Use Terraform Datasources concept
  • We didn't create multiple instances of same EC2 Instance
  • Resource Meta-Argument: count
  • We didn't add any variables for parameterizations
  • Terraform Input Variable Basics
  • We didn't extract any information on terminal about instance information
  • Terraform Outputs
  • Create second resource only after first resource is created
  • Defining Explicit Dependency in Terraform using Resource Meta-Argument depends_on