Mô phỏng AWS Lambda & API Gateway bằng Serverless Offline

by Hieu Nguyen
5 comments 226 views

Khi phát triển ứng dùng bằng AWS Lambda không phải lúc nào chúng ta cũng có thể phát triển trực tiếp trên AWS được. Do đó việc giả lập môi trường AWS để có thể chạy được Lambda và API Gateway là cần thiết. Nó không chỉ giúp chúng ta có thể học mà còn giúp cho quá trình phát triển nhanh hơn. Trong bài viết này tôi sẽ hướng dẫn các bạn giả lập AWS Lambda và API Gateway bằng Serverless Offline

Các công cụ cần thiết

Trước tiên bạn cần cài đặt các tool cần thiết, bạn có thể tham khảo hướng dẫn cài đặt trong các bài viết sau:

Bạn có thể dùng lệnh sau để cài serverless

[email protected] lambda % yarn global add serverless
yarn global v1.22.0
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 🔨  Building fresh packages...
success Installed "[email protected]" with binaries:
      - serverless
      - slss
      - sls
✨  Done in 14.23s.

Tạo một project mới

  • Tạo project với yarn
[email protected] hieunv % mkdir lambda
[email protected] hieunv % cd lambda
[email protected] lambda % yarn init
yarn init v1.22.0
question name (lambda):
question version (1.0.0):
question description:
question entry point (index.js):
question repository url:
question author:
question license (MIT):
question private:
success Saved package.json
✨  Done in 3.53s.
  • Cài đặt serverless-offline
[email protected] lambda % yarn add serverless-offline -D
  • Cài đặt serverless-python-requirements để viết lambda handler bằng python
[email protected] lambda % yarn add serverless-python-requirements -D

Cấu hình serverless.yml

serverless.yml

service: lambda

frameworkVersion: '>=1.1.0 <2.0.0'

provider:
  name: aws
  runtime: python3.7
custom:
  serverless-offline:
    port: 4000
plugins:
  - serverless-offline
  - serverless-python-requirements

Cấu hình lambda handler đầu tiên trong serverless.yml

Chúng ta tạo một Rest API sử dụng lambda bằng cách thêm đoạn sau vào file serverless.yml

functions:
  test:
    handler: src.api.test.lambda_handler
    events:
      - http:
          method: get
          path: api/test
          cors: true

Ở đây chúng ta tạo ra một Rest API với phướng thức GET và path /api/test. Các bạn nhìn thấy handler: src.api.test.lambda_handler đúng không. Đây là cấu hình hàm lamda sẽ được gọi bởi API Gateway

Viết code cho lambda handler

src/api/test.py

import json


def lambda_handler(event, context):
    headers = {"Access-Control-Allow-Origin": "*", "Accept": "application/json"}
    return {
        "statusCode": 200,
        "headers": headers,
        "body": json.dumps({"status": "success", "data": {}}),
    }

Tạo script để run server

Thêm đoạn sau vào package.json

    "scripts": {
        "start": "sls offline start"
    },

Giờ thì chạy thôi nào các thanh niên

[email protected] lambda % yarn start
yarn run v1.22.0
$ sls offline start
Serverless: Starting Offline: dev/us-east-1.

Serverless: Routes for test:
Serverless: GET /api/test
Serverless: POST /{apiVersion}/functions/lambda-dev-test/invocations

Serverless: Offline [HTTP] listening on http://localhost:4000
Serverless: Enter "rp" to replay the last request

Dùng Postman để call api vừa tạo nhé:

Cám ơn các bạn đã theo dõi bài viết. Hy vọng bài viết có thể giúp các bạn tiếp tục học và làm việc cùng với AWS Lambda và API Gateway trong các dự án của mình.

5 comments
13

5 comments

vuduc97 March 2, 2020 - 1:05 PM

Anh có thể viết thêm một bài sử dụng java được không ạ ?

Reply
Hieu Nguyen (HieuNV9) March 2, 2020 - 9:20 PM

ok em, chờ bài tiếp theo nhé

Reply
Hieu Nguyen (HieuNV9) March 2, 2020 - 10:10 PM

Hơi đen, vừa mới điều tra thì Serverless Offline chưa support Java nhé

Reply
Hieu Nguyen March 22, 2020 - 10:25 PM Reply
Duc Nguyen March 2, 2020 - 10:24 PM

Đúng cái e đang làm, ra thêm nhiều bài mới nha a

Reply

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

You may also like

%d bloggers like this: