How to Deploy NodeJS APIs on AWS
Tags: aws, node, javascript, webdev
Published: 2023-02-18 15:12:51

🚀 Welcome guys to our another episode of Software Development tutorials. So, most of us people did build some cool web apps and never thought about taking it to the real world. Although, we do find real problems when we go to the real market but nothing to worry. One of that problem we'll cover today. And that is:-

📍 How to make/deploy our NodeJS App on AWS so that it can handle/manage the traffic in real time and we can only focus on development.

Note:- We will also cover "How to reduce AWS Cost by 90% in our next Blog". Stay Tuned....

![AWS Meme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/32l6l39v4ubz24gr0aw7.png)

## 📍 Components that we will use

We're going to use AWS Lambda which runs only when triggered and we pay cost only for that (No of requests and duration of request we send). And Yes, 🥲 Don't worry AWS do provide some free criteria which is way more than enough for learning.

Note:- While creating your AWS account, add your debit/credit card but it no balance will be deducted for testing/learning our deployment.

🚀 We'll use NodeJS to make our API and Serverless framework to facilitate the deployment.

## 📍 Generate your access key and secret Key

Go to AWS, Create your account and add your debit/credit card to activate the AWS Account. (🙃 Don't worry you will not be charged in free tier).

- Go to security credentials

![AWS Secret Key](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pxn8tj4g4e279g3ike8u.png)

- Generate Access key and Secret Access key and note it down

## 📍 The Code

- Run commands in order in our project directory (After creating your project using npm init)

```BASH
npm init
sudo npm cache clean -f
sudo npm install -g n
sudo n stable
sudo npm install -g serverless
```
- Now, run the command
```BASH
serverless config credentials --provider aws --key <Access-Key> --secret <Secret-Key>
```

- 😎 Now it is time to setup the Serverless template

```BASH
serverless create -t aws-nodejs 
```
- It will give you serverless.yaml file

- Our serverless.yaml file looks like:-
```JSON
service: serverless-nodejs-app
provider:
  name: aws
  runtime: nodejs14.x
  stage: dev
  region: eu-central-1
functions:
  app:
    handler: app.server # reference the file and exported method
    events: # events trigger lambda functions
      - http: # this is an API Gateway HTTP event trigger
          path: /
          method: ANY
          cors: true
      - http: # all routes get proxied to the Express router
          path: /{proxy+}
          method: ANY
          cors: true
```

- app.js file looks like
```JAVASCRIPT
const express = require('express')
const sls = require('serverless-http')
const app = express()
app.get('/', async (req, res, next) => {
  res.status(200).send('Hello World!')
})
module.exports.server = sls(app)
```

🚀 Note:- Install these dependencies to run the project
```BASH
npm i serverless-http
npm i express
npm i cors
```

😎 Now, You all set. Our Project directory looks like this:-

![NodeJS Project](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f49t09ydrc58mzo9p3ji.png)

🧑‍💻 Now, run **_sudo sls deploy_** to deploy your project

![Serverless Application deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4isf3wg60x0yuhm6rtjz.png)
----
🚀 Run the command (Hidden in the CLI in above image) and you'll be able to hit the endpoint.