Skip to main content
API Gateway

Share Everywhere

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:

node

yarn

python

serverless

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é:

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.

Bạn cảm thấy bài viết này như thế nào?

Add new comment

Restricted HTML

  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
1 + 14 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.