Terraform Resources

Terraform Resources

Day 65 of 90daysofdevops

ยท

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


Thank You,

I want to express my deepest gratitude to each and every one of you who has taken the time to read, engage, and support my journey.

Feel free to reach out to me if any corrections or add-ons are required on blogs. Your feedback is always welcome & appreciated.

~ Abhisek Moharana ๐Ÿ™‚

ย