Terraform providers resources
Terraform Blocks
This block can be called in 3 ways. All means the same.
- Terraform Block
- Terraform Settings Block
- Terraform Configuration Block
Each terraform block can contain a number of settings related to Terraform’s behavior.
NOTE:-
Within a terraform block, only constant values can be used; arguments may not refer to named objects such as resources, input variables, etc, and may not use any of the Terraform language built-in functions.
Terraform Settings, Providers & Resource Blocks
Step-01: Introduction
- Terraform Settings
- Terraform Providers
- Terraform Resources
- Terraform File Function
- Create EC2 Instance using Terraform and provision a webserver with userdata.
Step-02: In c1-versions.tf – Create Terraform Settings Block
Understand about Terraform Settings Block and create it
# Terrform Block
terraform {
requrequired_version = "~> 1.0.8" # allow right most version like 1.0.9 not the major version
# if it is 1.0 then it will allow 1.xxxx because right most is 0 in this case
required_providers {
//aws is an attribute you can specify any variable name here and same name is to mention on provider block
aws ={
source="hashicorp/aws"
version="~>3.0"
}
}
}
Step-03: In c1-versions.tf – 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
- Create AWS Providers Block
Provider Block
# Terrform Block
terraform {
required_version = "~> 1.0.8" # allow right most version like 1.0.9 not the major version
# if it is 1.0 then it will allow 1.xxxx because right most is 0 in this case
required_providers {
//aws is an attribute you can specify any variable name here and same name is to mention on provider block
aws ={
source="hashicorp/aws"
version="~>3.0"
}
}
}
provider "aws"{
region="ap-south-1"
profile="rprofile"
}
Step-04: In c2-ec2instance.tf – Create Resource Block
Understand about Resources
- Create EC2 Instance Resource
- Understand about File Function
- Understand about Resources – Argument Reference
- Understand about Resources – Attribute Reference
Resource: EC2 Instance
resource "aws_instance" "myins" {
ami = "ami-0108d6a82a783b352"
instance_type = "t2.micro"
user_data = file("${path.module}/app1-install.sh")
tags = {
"Name" = "demo"
}
}
Step-05: Review file app1-install.sh
#! /bin/bash
# Instance Identity Metadata Reference - https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html
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 Terraform - APP-1</h1> <p>Terraform Demo</p> <p>Application Version: V1</p> </body></html>' | sudo tee /var/www/html/app1/index.html
sudo curl http://169.254.169.254/latest/dynamic/instance-identity/document -o /var/www/html/app1/metadata.html
Step-06: Execute Terraform Commands
Terraform Initialize
terraform init
Observation:
Initialized Local Backend
Downloaded the provider plugins (initialized plugins)
Review the folder structure “.terraform folder”
Terraform Validate
terraform validate
Observation:
- If any changes to files, those will come as printed in stdout (those file names will be printed in CLI)
Terraform Plan
terraform plan
Observation:
- No changes – Just prints the execution plan
Terraform Apply
terraform apply
[or]
terraform apply -auto-approve
Observations:
Create resources on cloud
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
curl localhost
curl localhost/app1/index.html
Access metadata.html
curl localhost/app1/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*