Skip to main content

Command Palette

Search for a command to run...

Creating a Web Server on AWS Using "Terraform".

Published
3 min read

Introduction

In the world of DevOps, Infrastructure as Code (IaC) has become a crucial practice for managing and provisioning infrastructure. Terraform, an open-source IaC tool developed by HashiCorp, allows you to define and provision data center infrastructure using a high-level configuration language. In this blog post, we will walk through the steps to create a web server on AWS using Terraform.

Prerequisites

Before we begin, ensure you have the following:

  • An AWS account.

  • AWS CLI installed and configured.

  • Terraform installed on your local machine. You can download it from the official website.

Step 1: Set Up AWS Credentials

Terraform requires AWS credentials to interact with the AWS API. You can set these credentials using the AWS CLI or environment variables.

Using AWS CLI:

aws configure

Using Environment Variables:

export AWS_ACCESS_KEY_ID="your-access-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret-access-key"

Step 2: Create a Terraform Configuration File

Create a directory for your Terraform project and inside it, create a file named main.tf. This file will contain the configuration for your web server.

mkdir terraform-aws-web-server
cd terraform-aws-web-server
touch main.tf

Step 3: Define the AWS Provider

In the main.tf file, define the AWS provider. This tells Terraform that you want to use AWS as your cloud provider.

provider "aws" {
  region = "us-west-2"
}

Step 4: Define the EC2 Instance Resource

Next, define an EC2 instance resource. This will be your web server.

resource "aws_instance" "web_server" {
  ami           = "ami-0c55b159cbfafe1f0"  # Amazon Linux 2 AMI
  instance_type = "t2.micro"

  tags = {
    Name = "WebServer"
  }

  user_data = <<-EOF
              #!/bin/bash
              yum update -y
              yum install -y httpd
              systemctl start httpd
              systemctl enable httpd
              echo "Hello, World" > /var/www/html/index.html
              EOF
}

In this example:

  • ami specifies the Amazon Machine Image (AMI) ID for the Amazon Linux 2 image.

  • instance_type specifies the instance type.

  • tags adds a name tag to the instance.

  • user_data contains a shell script that will run when the instance starts. This script updates the package manager, installs Apache HTTP Server, starts the service, and creates a simple HTML page.

Step 5: Initialize the Terraform Project

Initialize the Terraform project to download the necessary provider plugins.

terraform init

Step 6: Create an Execution Plan

Generate and review an execution plan to see what actions Terraform will take to create the resources.

terraform plan

This command will show you a detailed plan of the changes Terraform will make.

Step 7: Apply the Configuration

Apply the configuration to create the EC2 instance.

terraform apply

Terraform will prompt you to confirm the action. Type yes to proceed.

Step 8: Verify the EC2 Instance

Once the apply command completes, you can verify that the EC2 instance has been created in the AWS Management Console. You can also retrieve the public IP address of the instance using Terraform.

terraform output

You should be able to access the web server by navigating to the public IP address in a web browser. You should see the "Hello, World" message.

Step 9: Clean Up

To clean up and remove the resources created by Terraform, use the destroy command.

terraform destroy

This will terminate the EC2 instance and delete all associated resources.

Full main.tf Example

Here’s the complete main.tf file for reference:

provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "web_server" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Name = "WebServer"
  }

  user_data = <<-EOF
              #!/bin/bash
              yum update -y
              yum install -y httpd
              systemctl start httpd
              systemctl enable httpd
              echo "Hello, World" > /var/www/html/index.html
              EOF
}

Conclusion

By following these steps, you can create a web server on AWS using Terraform. This process demonstrates the power of Infrastructure as Code (IaC), allowing you to define, provision, and manage your infrastructure using code. Terraform simplifies infrastructure management, making it easier to version control, audit, and automate your infrastructure deployments. Happy Terraforming!