Day 65 Task: Working with Terraform Resources

Day 65 Task: Working with 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.

๐Ÿ”ถ Task 1: Create a security group

To allow traffic to the EC2 instance, you need to create a security group. Follow these steps:

In your main.tf file, add the following code to create a security group:

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "5.17.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"]
  }

  ingress {
    from_port   = 22
    to_port     = 22
    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 Terraform init to initialize the Terraform project.

  • Run Terraform apply to create the security group.

๐Ÿ”ถ 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 = "5.17.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"]
  }

  ingress {
    from_port   = 22
    to_port     = 22
    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"]
        }
}

resource "aws_instance" "web_server" {
  ami           = "ami-053b0d53c279acc90"
  instance_type = "t2.micro"
  key_name      = "CP-keys"

security_groups = [
    aws_security_group.web_server.name
  ]

tags = {
        Name= "TfInstanceByChandresh"
        }
  user_data = "${file("index.sh")}"
}

Now create an index.sh file in the same directory

#!/bin/bash
sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx
echo "<html><body><h1>Welcome to my website, My name is Chandresh Patle!</h1></body></html>" > /var/www/html/index.html

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.

  • Now Open the web browser by using the new instance Public IP address.


Happy Learning :)

Stay in the loop with my latest insights and articles on cloud โ˜๏ธ and DevOps โ™พ๏ธ by following me on Hashnode, LinkedIn (https://www.linkedin.com/in/chandreshpatle28/), and GitHub (https://github.com/Chandreshpatle28).

Thank you for reading! Your support means the world to me. Let's keep learning, growing, and making a positive impact in the tech world together.

#Git #Linux Devops #Devopscommunity #90daysofdevopschallenge #python #docker #Jenkins #Kubernetes #Terraform

Did you find this article valuable?

Support Chandresh Patle's Blog by becoming a sponsor. Any amount is appreciated!

ย