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.
Here’s an example of a resource block defining an AWS EC2 instance:
resource "aws_instance" "example" {
ami = "ami-0c94855ba95c71c99"
instance_type = "t2.micro"
key_name = "my-keypair"
tags = {
Name = "example-instance"
}
}
In this example, we define an AWS EC2 instance resource with the AMI ID, instance type, key pair name, and a tag for identifying the instance. This resource block tells Terraform to create and manage the specified EC2 instance in your infrastructure.
Task 1:
Create a Security Group
To allow traffic to your EC2 instance, you need to create a security group. Here’s how:
Step 1: Create a terraform.tf
file and add the AWS provider.
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "5.8.0"
}
}
}
Step 2: Create a provider.tf
and put the selected AWS Region that you want to create a security group.
provider "aws" {
region = "us-east-1"
}
Step 3: Create main.tf
file and add the below code to create a security group:
resource "aws_security_group" "web_server" {
name_prefix = "web-server-sg"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
Step 4: Now the first step is to initialize the working directory with the necessary plugins and modules by executing terraform init
.
Step 5: Once you initialize all the plugins required for AWS, now execute the terraform plan
which will create an execution plan by analyzing the changes required to achieve the desired state of your infrastructure.
Step 6: Finally, use the command terraform apply
it will apply the changes to create or update resources as needed.
Step 7: Check whether the security group is created or not.
Task 2:
Create an EC2 instance
Now, We can create an EC2 instance with Terraform. Follow these steps:
Step 1: In your main.tf
file, add the following code to create an EC2 instance:
resource "aws_instance" "web_server" {
ami = "ami-07caf09b362be10b8"
instance_type = "t2.micro"
key_name = "terraform"
tags = {
Name = "TerraformTestServer1"
}
security_groups = [
aws_security_group.web_server.name
]
user_data = <<-EOF
#!/bin/bash
sudo apt-get update -y
sudo apt-get install apache2 -y
sudo systemctl start apache2
sudo systemctl enable apache2
sudo systemctl restart apache2
sudo chmod 766 /var/www/html/index.html
sudo echo "<html><body><h1>Welcome to my website!</h1></body></html>" >/var/www/html/index.html
EOF
}
Note: Replace the ami and key_name values with your own. You can find a list of available AMIs in the AWS documentation.
Step 2: Now the first step is to initialize the working directory with the necessary plugins and modules by executing terraform init
.
Step 3: Once you initialize all the plugins required for AWS, now execute the terraform plan
,
Step 4: Finally, use the command terraform apply
.
You can see the instance has been created.
Task 3:
Access your website
Now that your EC2 instance is up and running, you can access the website you just hosted on it. Follow these steps:
Step 1: Go to the newly created EC2 instance and copy Public IPv4 address that was created by terraform.
Step 2: Browse http://<Public_IPv4_Addr>
of your instance. You can see the webpage.
Step 3: Once you are done with the newly created instance, we can use terraform destroy
command which will delete the entire infrastructure.
Step 4: Now, we can see EC2 Instance is in the terminated state.
Congratulations! ✨✨You have successfully created a security group, provisioned an EC2 instance, and hosted a website using Terraform.
Thank you for 📖reading my blog, 👍Like it and share it 🔄 with your friends . Hope you find it helpful🤞
Happy learning😊😊