Terraform Resources ๐Ÿš€

ยท

3 min read

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.

A resource block typically includes the following elements:

  • Resource Type: Specifies the type of resource being defined, such as "aws_instance" for an Amazon EC2 instance.

  • Resource name: Provides a unique name for the resource within your configuration.

  • Resource configuration: Specifies the desired settings and attributes for the resource, such as the instance type, disk size, or access control rules.

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 configures the AWS Provider.

terraform {
    required_providers {
      aws = {
        source  = "hashicorp/aws"
        version = "~> 4.0"
      }
    }
  }

  provider "aws" {
    region = "us-east-1"
  }

Now add the following code in your main.tf file 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"] 
     }
  }

Run the terraform init to initialize the Terraform project

terraform init

Run the Terraform apply to create the security group.

Terraform apply

Now Check whether the security group is created or not.

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:

resource "aws_instance" "web_server" {
ami = "ami-05548f9cecf47b442"
instance_type = "t2.micro"
key_name = "an-access-key"
tags = {
Name = "TerraformServer1"
}
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 "Hello, Welcome to my website!" >/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.

Run terraform apply to create the EC2 instance.

Terraform apply

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:

Copy the public IPv4 address of the instance that is created using Terraform. Browse http://<Public_IPv4_Addr> of your instance. You can see the webpage.

Thank you for reading this blog. If you found this blog helpful, please like, share, and follow me for more blog posts like this in the future.

โ€” Happy Learning !!!

Letโ€™s connect !!!

Linkedin

Medium

Github

Mail

ย