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 ๐