Launching an EC2 Instance with Terraform: A Practical Guide

mdshamsfiroz
3 min readOct 27, 2024

--

Introduction

Terraform has revolutionized the way we manage infrastructure as code. In this blog post, we’ll walk through the process of using Terraform to launch an EC2 instance on AWS. We’ll also share our experience of deploying a real-world application, Snipe-IT, using this method.

Prerequisites

Before we begin, ensure you have:

  1. An AWS account
  2. Terraform installed on your local machine
  3. AWS CLI configured with your credentials

Step 1: Set Up Your Terraform Configuration

First, create a new directory for your Terraform project and create a file named main.tf. This file will contain our Terraform configuration.

provider "aws" {
region = "us-west-2" # Choose your preferred region
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0" # Amazon Linux 2 AMI ID
instance_type = "t2.micro"
tags = {
Name = "ExampleInstance"
}
}

This configuration specifies the AWS provider and creates a simple EC2 instance using the Amazon Linux 2 AMI.

Step 2: Initialize and Apply

In your terminal, navigate to your project directory and run:

terraform init
terraform apply

Terraform will show you a plan of what it’s going to create. Type ‘yes’ to proceed.

When you’re done, destroy the resources:

terraform destroy

Type ‘yes’ when prompted.

Step 3: Verify the Instance

Log into your AWS Console and navigate to the EC2 dashboard. You should see your new instance running.

Real-World Application: Deploying Snipe-IT

To demonstrate a practical use case, we deployed Snipe-IT, an open-source asset management system, using Terraform. Here’s a brief overview of our experience:

  1. We extended our Terraform configuration to include necessary security groups, an Elastic IP, and a more detailed EC2 instance configuration.
  2. We used a user data script to automate the installation of Snipe-IT and its dependencies on the EC2 instance.
  3. Our Terraform script also set up an RDS instance for the database, demonstrating how Terraform can manage multiple AWS resources simultaneously.

I also launched virtual machine of azure using terraform :- https://www.loom.com/share/857e25e014e74a8290130dc46144c1d5?sid=f08be69c-8bd7-462b-8484-e7a4500fd012

Key Learnings

  1. Modularity: We found it beneficial to break our Terraform configuration into modules for better organization and reusability.
  2. State Management: For team collaboration, we used Terraform Cloud to manage the state file, ensuring consistency across team members.
  3. Variable Usage: Leveraging variables in our Terraform scripts allowed for easy customization and environment-specific configurations.
  4. Security Considerations: We implemented best practices like using security groups and private subnets to enhance the security of our deployment.

Conclusion

Terraform simplifies the process of launching and managing AWS resources, making it an invaluable tool for DevOps practices. By automating infrastructure deployment, we can ensure consistency, reduce human error, and speed up our development processes.Whether you’re launching a simple EC2 instance or deploying a complex application like Snipe-IT, Terraform provides the flexibility and power to manage your infrastructure effectively.Remember to always follow AWS best practices and consider costs when launching resources. Happy Terraforming!

--

--

mdshamsfiroz
mdshamsfiroz

Written by mdshamsfiroz

Trying to learn tool by putting heart inside to make something

No responses yet