blog bg

April 10, 2024

Deploying a Node.js Application on AWS EC2 Using Terraform

Share what you learn in this blog to prepare for your interview, create your forever-free profile now, and explore how to monetize your valuable knowledge.

 

In the realm of modern web development, deploying applications efficiently and reliably is crucial. Leveraging cloud services such as Amazon Web Services (AWS) provides developers with scalable infrastructure to host their applications. One popular method for managing infrastructure as code is Terraform, a tool that allows you to define and provision resources across various cloud platforms. In this article, we will walk through the process of deploying a Node.js application on an AWS EC2 instance using Terraform.

 

Prerequisites:
Before diving into the deployment process, make sure you have the following prerequisites in place:

An AWS Account: Sign up for an AWS account if you haven't already.
Node.js Application: Have your Node.js application code ready to be deployed.
Terraform Installed: Install Terraform on your local machine. You can download it from the official website or use a package manager like Homebrew (for macOS) or Chocolatey (for Windows).

 

Steps to Deploy Node.js Application on AWS EC2 Using Terraform:

1. Set Up AWS Credentials:

Ensure that you have configured your AWS credentials on your local machine. You can do this by either setting up AWS access keys or using AWS IAM roles. Terraform uses these credentials to authenticate with AWS when creating resources.

2. Write Terraform Configuration:

Create a new directory for your Terraform project and navigate into it. Create a file named main.tf, which will contain the Terraform configuration.

Here's a sample main.tf configuration for deploying a basic EC2 instance:

 

//hcl file

provider "aws" {
  region = "your_aws_region"
}

resource "aws_instance" "example" {
  ami           = "your_ami_id"
  instance_type = "t2.micro"

  tags = {
    Name = "NodeAppInstance"
  }

  key_name      = "your_key_pair_name"

  provisioner "file" {
    source      = "app.js"
    destination = "/home/ubuntu/app.js"
  }

  connection {
    type     = "ssh"
    user     = "ubuntu"
    private_key = file("your_private_key_path")
    host     = self.public_ip
  }

  provisioner "remote-exec" {
    inline = [
      "sudo apt update",
      "sudo apt install -y nodejs npm",
      "nodejs /home/ubuntu/app.js &"
    ]
  }
}

 

Replace placeholders like your_aws_region, your_ami_id, your_key_pair_name, and your_private_key_path with your actual AWS configuration details.

3. Initialize Terraform:

Run the following command to initialize Terraform in your project directory:

 

>> terraform init

 

This will download any necessary plugins for Terraform to interact with AWS.

4. Plan and Apply Changes:

Run the following command to preview the changes that Terraform will make:

>> terraform plan

 

Review the plan and ensure that it matches your expectations. Then, apply the changes:

terraform apply

 

Terraform will create the EC2 instance based on the configuration provided.

5. Access Your Application:

Once Terraform finishes applying the changes, you can access your application by using the public IP address of the EC2 instance. Simply open a web browser and navigate to http://<public_ip_address>:<port>.

 

Conclusion:

Deploying a Node.js application on AWS EC2 using Terraform offers a streamlined and reproducible approach to managing infrastructure. By defining your infrastructure as code, you can easily version control, share, and replicate your deployment across environments. With Terraform's declarative syntax and AWS's scalable infrastructure, you can focus more on developing your applications and less on managing the underlying infrastructure.

 

478 views

Please Login to create a Question