Hướng dẫn tạo lambda nodejs kết hợp với cài node modules

NodeJS Jul 18, 2021

Hello anh chị em,

Thường thì khi tạo lambda nodejs trên aws, chúng ta sẽ không có lựa chọn để cài đặt thêm các modules bên ngoài. Vậy nên, hôm nay một fresher nodejs không chuyên sẽ hướng dẫn anh chị em cách để tạo một lambda trên AWS có cài đặt modules.

1. Chuẩn bị source code:

Mình sẽ sử dụng express để code lambda, bằng cách chạy thử hello world theo link này

Để có thể sử dụng express lên lambda cần phải sử dụng thêm một module gọi là serverless-http kết hợp vào source code expressjs

đoạn code sẽ như sau:

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

app.get('/', (req, res) => {
  res.send('Hello World!')
})

// app.listen(port, () => { // comment listen khi chạy cùng với serverless-http
//   console.log(`Listen on: ${port}`)
// })

module.exports.handler = serverless(app);

▶ Sau đó, zip toàn bộ source code lại, bao gồm cả thư mục node_modules.

2. Tạo lambda:

Để tạo lambda trên aws có 2 cách chính là sử dụng console (trên web) hoặc qua cli (trên command line)

Anh chị em có thể sử dụng giao diện console để tạo cho nó trực quan (cách này không thể đưa các thư viện modules lên được).

create_lambda-1

Mình đang sử dụng cli để tạo lambda (để dùng được cli cần cấu hình aws cli credential nhé) (có thể đưa các thư viện modules lên bằng cách zip tất cả lại):

aws lambda create-function \
    --function-name myFunctionName
    --runtime nodejs14.x
    --zip-file fileb://app.zip
    --handler index.handler
    --role arn:aws:iam::▒▒▒▒▒▒▒▒▒:role/▒▒▒▒▒▒▒▒▒
    --profile microservice

trong đó:

  • myFunctionName: là tên function
  • nodejs14.x: là ngôn ngữ dành cho việc phát triển
  • app.zip: là file nén source code bên trên
  • index.handler: là tên class thực thi chính (thường sẽ trùng với tên file)
  • role: là role sẽ được gắn cho lambda (cái này cần thiết lập ở IAM)
  • microservice: profile của credential (mặc định là default)

Chú ý: sử dụng cách tạo lambda qua cli là trường hợp chúng ta đã có code ở dưới local và nén lại dưới dạng 1 file zip, nên anh chị em chú ý là phải có code trước xong mới dùng lệnh trên để tạo lambda nhé

Vậy là xong việc đầu tiên, chúng ta đã tạo được 1 lambda như dưới

f

3. Cấu hình API Gateway

Để tiến hành chạy thử lambda, mình sẽ cấu hình một API Gateway bằng cách

  • Add trigger -> API Gateway

g

Sau khi tạo xong, lambda đã có API endpoint(3) để truy cập:
i

Nhưng chưa đâu, anh chị em cần phải deploy API bằng cách ấn vào (2) chọn actions -> Deploy API
j

Khi ấn Deploy API sẽ có 1 popup hiện ra để chọn stage, anh chị em chọn default hoặc tạo mới 1 stage, stage này sẽ là 1 phần trên đường dẫn API endpoint

deploy_apigw

Vậy là xong, thử truy cập API endpoint xem nào

k

Nếu anh chị em bị lỗi như này thì chúng ta sẽ tới bước tiếp theo, còn hiển thị được hello world thì là thành công rồi nhé

Để sửa được lỗi trên, hãy cùng quay lại file index.js, cấu hình lại router

app.get('/myFunctionName', (req, res) => {
  res.send('Hello World!')
})

Nhớ ấn Deploy để cập nhật thay đổi nhé.

Cùng quay lại API endpoint, màn hình hiển thị Hello World! là được rồi đó.

4. Cập nhật code

Để cập nhật code mới từ local lên lambda ta dùng lệnh sau:

aws lambda update-function-code \
    --function-name myFunctionName
    --zip-file fileb://app.zip
    --profile microservice

Nhớ zip lại source code mới nhất

Tổng kết

Vậy là mình đã hướng dẫn anh chị em cách tạo một lambda kết hợp với cài đặt các modules, và sử dụng API Gateway.

Lambda này có cài modules expressjs và serverless-http, anh chị em muốn cài thêm modules nào thì cấu hình, sau đó zip file source code lại rồi chạy lệnh update để đưa lên lambda nhé

Ngoài ra việc cấu hình API Gateway với lambda còn nhiều thứ nữa mà mình chưa có kể tới trong bài viết này, Anh chị em có thể tìm kiếm thêm hoặc có phần Discussion bên dưới, anh chị em có thể vào tương tác.

Cuối cùng, hẹn anh chị em ở các bài viết tiếp theo.

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.