Deploy Express JS container image on Lambda AWS

janithdisanayake

Janith Disanayake

Posted on September 24, 2024

Deploy Express JS container image on Lambda AWS

Introdction

If you want to build a application but you don't want to buy and maintain server the best option is Lambda. You still can use .zip file to create a Expressjs Lambda but that is not a best practice to do as a developer. In this scenario you can use Container Image to create a server.

Resources

Steps šŸ“š

Create Express app

1) Create Directory for application

mkdir lambda-express
cd lambda-express
Enter fullscreen mode Exit fullscreen mode

2) Initialization

npm init
Enter fullscreen mode Exit fullscreen mode

3) Install Express

npm install express
Enter fullscreen mode Exit fullscreen mode

4) Install serverless-http

npm install serverless-http
Enter fullscreen mode Exit fullscreen mode

Application implementation

1) app.js file => (lambda-express/app.js)

const express = require('express');
const serverless = require('serverless-http');
const app = express();

app.use(express.json());

app.get('/', (req, res) => {
        console.log("/ endpoint is reached");
        res.send('Hello World!');
});

app.get('/hello', (req, res) => {
        console.log("/ endpoint is reached");
        res.send('Hello from Lambda!');
});

module.exports.handler = serverless(app);
Enter fullscreen mode Exit fullscreen mode

2) package.json => (lambda-express/package.json)

{
  "name": "example",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node app.js"
  },
  "author": "janith",
  "license": "ISC",
  "description": "",
  "dependencies": {
    "express": "^4.19.2",
    "serverless-http": "^3.2.0"
  }
}
Enter fullscreen mode Exit fullscreen mode

3) Check all the npm packages are available or not

npm ls 
Enter fullscreen mode Exit fullscreen mode

result

example@1.0.0 /home/janith/TEST/example
ā”œā”€ā”€ express@4.19.2
ā””ā”€ā”€ serverless-http@3.2.0
Enter fullscreen mode Exit fullscreen mode

Create a docker image

1) Docker file

# Use the official AWS Lambda Node.js base image
FROM amazon/aws-lambda-nodejs

# Copy function code
COPY package*.json ${LAMBDA_TASK_ROOT}
COPY node_modules ${LAMBDA_TASK_ROOT}
COPY app.js ${LAMBDA_TASK_ROOT}
RUN npm install

# Command to run the Lambda function
CMD ["app.handler"]
Enter fullscreen mode Exit fullscreen mode

2) Confirm installation

npm install
Enter fullscreen mode Exit fullscreen mode

3) Build the Image

  • make sure you are in the same directory that Dockerfile file is located
docker build -t lambda-express:latest . 
Enter fullscreen mode Exit fullscreen mode

Image description

Upload Image to ECR

1) Create a ECR

  • ECR is Elastic Container Registory in AWS
  • go to ECR and create a private repository Image description

2) Upload the Image that you build locally

  • go inside of the repository
  • click View push commands

Image description

3) Login first

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 144901196852.dkr.ecr.us-east-1.amazonaws.com
Enter fullscreen mode Exit fullscreen mode

Image description

4) Tag the image

  • you build the image previously no need to build it again if you use another name that different from this repostiry
docker tag lambda-express:latest 144901196852.dkr.ecr.us-east-1.amazonaws.com/lambda-express:latest
Enter fullscreen mode Exit fullscreen mode

5) Push the image into ECR

docker push 144901196852.dkr.ecr.us-east-1.amazonaws.com/lambda-express:latest
Enter fullscreen mode Exit fullscreen mode

Image description

Deploy Image on Lambda šŸš€

1) Create a Lambda function
Image description

2) Select option as Container Image
Image description

3) Function Name
Image description

4) Container Image URI

  • Click Browse images
    Image description

  • Select your private repository and Image that you created
    Image description

5) Keep other settings as default and create the function

6) Goto configurations and create a Function URL

Image description

7) Make sure to select the Auth type as NONE

Image description

Congratulations šŸŽ‰ Just now you deployed your app

click your Function URL and enjoy

happy coding !

šŸ’– šŸ’Ŗ šŸ™… šŸš©
janithdisanayake
Janith Disanayake

Posted on September 24, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related