Day 65 - Working with Terraform Resources 🚀

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

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:

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"]
  }
}

No alt text provided for this image

First, we configure the AWS provider with the desired region in this configuration.

Using the aws_security_group resource block, create a security group that permits inbound traffic on port 80 from any IP address. This ensures that we can use the public internet to view the website.

Run terraform init to initialize the Terraform project.

No alt text provided for this image

Run terraform Plan

No alt text provided for this image

Run terraform apply to create the security group.

No alt text provided for this image

The Security group has been created.

Select 'Security Groups' from the EC2 service's 'Network & Security' menu.

Terraform was used to establish the web-server-sg security group.

No alt text provided for this image

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-00aa9d3df94c6c354"
  instance_type = "t2.micro"
  key_name      = "AnsibleKey"
  security_groups = [
    aws_security_group.web_server.name
  ]

  user_data = <<-EOF
              #!/bin/bash
              echo "<html><body><h1>Welcome to my websitethat has been provisioned by TERRAFORM</h1></body></html>" > index.html
              nohup python3 -m http.server80 &
  EOF
}

///if you use python2 version then use-

   nohup python -m SimpleHTTPServer 80 &

Note: Replace the ami and key_name values with your own.

We use the user_data parameter to execute a Bash script that sets up a basic web server using Python's SimpleHTTPServer.

No alt text provided for this image

When we use Terraform to launch an EC2 instance with this user_data script, it will put up a web server on port 80 that will deliver the content of index.html. You can then view the website by using a web browser to navigate to your instance's public IP address.

Run terraform apply to create the EC2 instance.

No alt text provided for this image

No alt text provided for this image

An EC2 instance has been established.

No alt text provided for this image

Copy the public-IP-address of an instance built with Terraform.

No alt text provided for this image

Browse the public IP address of your instance. You can see the webpage.

I appreciate your time. I appreciate you reading.