Terraform Resources

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.

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 and.

  • Run the terraform apply to create the security group.

  • 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-053b0d53c279acc90"
    instance_type = "t2.micro"
    key_name      = "Terraform-Key"
    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.

  • Run terraform apply to create the EC2 instance.

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.