Day 65 — Working with Terraform Resources
Yesterday, we saw how to create a Terraform script with Blocks and Resources. Today, we will dive deeper into Terraform resources.
Understanding Terraform Resources
A resource in Terraform represents a component of your infrastructure, such as a physical server, a virtual machine, a DNS record, or an S3 bucket. Resources have attributes that define their properties and behaviors, such as the size and location of a virtual machine or the domain name of a DNS record.
When you define a resource in Terraform, you specify the type of resource, a unique name for the resource, and the attributes that define the resource. Terraform uses the resource block to define resources in your Terraform configuration.
Tasks
Task 1: Create a security group. To allow traffic to the EC2 instance, you need to create a security group.
In your main.tf file, add the following code to create a security group:
In your main.tf file, add the following code to create a security group:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
region = "ap-south-1"
}
resource "aws_security_group" "web_server" {
name_prefix = "web-server-sg"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
Run terraform init to initialize the Terraform project.
terraform init
Run terraform plan to check the plan of the security group.
terraform plan
Run terraform apply to create the security group.
terraform appy
Check Security group is created
Go to EC2 service
Inside ‘Network & Security’, select ‘Security Groups’
You can see web-server-sg security group is created using terraform.
Task 2: Create an EC2 instance. Now you can create an EC2 instance with Terraform. Follow these steps
In your main.tf file, add the following code to create an EC2 instance:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
region = "us-east-1"
}
resource "aws_security_group" "web_server" {
name_prefix = "web-server-sg"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "web_server" {
ami = "ami-0557a15b87f6559cf"
instance_type = "t2.micro"
key_name = "my-key-pair"
security_groups = [
aws_security_group.web_server.name
]
user_data = <<-EOF
#!/bin/bash
echo "<html><body><h1>Welcome to my website!</h1></body></html>" > index.html
nohup python -m SimpleHTTPServer 80 &&
EOF
}
Note: Replace the ami and key_name values with your own. You can find a list of available AMIs in the AWS documentation.
Run terraform apply to create the EC2 instance.
terraform apply
Let’s check whether our ec2 instance has got deployed or not.
Yes, Our EC2 instance has got deployed.
Task 3: Access your website. Now that your EC2 instance is up and running, you can access the website you just hosted on it.
When we launch an EC2 instance using Terraform with this user_data script, it will set up a web server serving the content of index.html on port 80. You can then access the website by navigating to the public IP address of your instance in a web browser.
Copy public-ip-address of instance that is created using terraform.
Browse public ip address of your instance. You can see webpage.