Launching an EC2 Instance Using Terraform

Ayushmaan Srivastav
4 min readOct 5, 2024

--

Introduction

Launching an EC2 instance is one of the most basic yet powerful use cases when working with cloud platforms like AWS. However, doing it manually through the AWS Management Console can become repetitive and error-prone, especially when dealing with multiple instances and environments. That’s where Terraform comes into play!

Terraform, an open-source Infrastructure as Code (IaC) tool, allows you to define cloud resources declaratively and manage infrastructure efficiently. This blog will guide you through the process of launching an EC2 instance using Terraform, demonstrating the steps and the benefits of automating such tasks.

Why Automate with Terraform?

Imagine you’re working at a fast-growing startup or an enterprise like Netflix or Uber, where servers are provisioned and de-provisioned frequently to handle dynamic traffic. Manual processes would be time-consuming and increase the likelihood of human errors. Terraform can automate the process, allowing the team to:

  • Spin up multiple instances quickly.
  • Manage infrastructure as code, ensuring that changes are trackable and reversible.
  • Apply consistent configurations across different environments.

Let’s get started with how to achieve this!

Prerequisites

Before we dive into the Terraform code, ensure you have the following prerequisites set up:

  1. AWS Account: You’ll need access to an AWS account to launch an EC2 instance.
  2. IAM User: Ensure you have an IAM user with the necessary EC2 and VPC permissions.
  3. AWS CLI: Installed and configured on your machine.
  4. Terraform: Installed on your machine. You can download it from the official Terraform website.

Step-by-Step Guide to Launch an EC2 Instance

1. Set up the Terraform Configuration

Create a new directory and navigate into it. For example:

mkdir terraform-ec2
cd terraform-ec2

2. Write the Terraform Configuration

Open the main.tf file and add the following Terraform configuration code:

# Step 1: Define the provider for AWS
provider "aws" {
region = "us-west-2" # Define the AWS region where you want to launch the EC2 instance
}

# Step 2: Create a key pair (optional)
resource "aws_key_pair" "mykey" {
key_name = "my-key"
public_key = file("~/.ssh/id_rsa.pub") # Make sure to have an existing SSH key here
}

# Step 3: Define the security group for the instance
resource "aws_security_group" "allow_ssh" {
name = "allow_ssh"
description = "Allow SSH inbound traffic"

ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] # Allow SSH from anywhere (not recommended for production)
}

egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}

# Step 4: Define the EC2 instance
resource "aws_instance" "my_instance" {
ami = "ami-0abcdef1234567890" # Replace with a valid AMI ID from your region
instance_type = "t2.micro"

key_name = aws_key_pair.mykey.key_name
vpc_security_group_ids = [aws_security_group.allow_ssh.id]

tags = {
Name = "MyTerraformEC2"
}
}

3. Initialize Terraform

In the directory where your main.tf file is located, run the following command to initialize the project. This command downloads the necessary provider plugins and sets up your workspace.

terraform init

4. Plan the Terraform Changes

To verify that everything is set up correctly, run the terraform plan command. This command generates an execution plan, showing you what Terraform will do without making any actual changes yet.

terraform plan

You should see an output detailing the creation of the EC2 instance, security group, and key pair.

5. Apply the Terraform Configuration

Once you’re satisfied with the plan, use the terraform apply command to launch the EC2 instance:

terraform apply

Terraform will prompt you to confirm the action. Type yes to proceed. After a few seconds, Terraform will have launched your EC2 instance, and you’ll see the instance ID in the output.

6. Verify the EC2 Instance in AWS

Head over to the AWS Management Console and navigate to the EC2 Dashboard. You should now see your new EC2 instance running!

7. Destroy the Infrastructure (Optional)

If you want to clean up and delete the resources you’ve created, use the terraform destroy command:

terraform destroy

This will remove the EC2 instance, security group, and key pair that Terraform created.

Real-World Application

Case Study: Atlassian (2018)

In 2018, Atlassian, the company behind Jira and Trello, used Terraform to scale their infrastructure management. With a growing user base, Atlassian needed to manage thousands of servers across multiple regions. They adopted Terraform to:

  • Automate EC2 instance provisioning: By using Terraform, Atlassian automated the deployment of EC2 instances, reducing manual effort.
  • Version-controlled infrastructure: Terraform’s ability to track changes allowed Atlassian to roll back to previous configurations in case of errors.

This saved them time, reduced human error, and provided a scalable, repeatable way to manage their AWS infrastructure.

Case Study: Lyft (2019)

Lyft, the ride-sharing company, also turned to Terraform in 2019 to manage their cloud infrastructure. Lyft had a complex architecture with microservices running on multiple EC2 instances. Using Terraform, they were able to:

  • Automate infrastructure deployments for thousands of EC2 instances.
  • Maintain consistency across environments, ensuring that their staging and production environments were identical.

Terraform allowed Lyft to scale their infrastructure in a cost-effective and efficient manner.

Conclusion

Launching an EC2 instance with Terraform is just the tip of the iceberg when it comes to the power of Infrastructure as Code. As demonstrated by companies like Atlassian and Lyft, Terraform can handle even the most complex infrastructure needs, providing automation, consistency, and scalability.

By automating infrastructure deployment, you not only save time but also reduce errors, enabling you to focus on building better applications. So, dive into Terraform, start experimenting, and see how it can transform your cloud management practices!

--

--

No responses yet