KẾT HỢP GIỮA AWS LAMBDA VÀ API GATEWAY DÙNG NGÔN NGỮ PYTHON


KẾT HỢP GIỮA AWS LAMBDA VÀ API GATEWAY DÙNG NGÔN NGỮ PYTHON.


Nội dung bài viết:
  • Mục đích của bài viết.
  • AWS Lambda là gì ?
  • Thiết lập cấu hình cơ bản
  • Thiết lập AWS lambda
    - Tạo function.
    - Kiểm tra function.
  • Thiết lập API gateway.
    - Tạo API
    - Kiểm tra bằng manually.
    - Bật tính nằng CORS
    - Triển khai API
    - Kiểm tra API thông qua cURL
  • Cập nhật Form.

MỤC TIÊU:

Sau bài viết này bạn có thể:
  1. Hiểu được AWS Lambda và API Gateway là gì và tại sao chúng ta cần sử dụng chúng.
  2. Thảo luận các lợi ích của việc sử dụng AWS lambda function.
  3. Dùng ngôn ngữ python để tạo các hàm AWS Lambda
  4. Phát triển các RESTFUL API đầu cuối kết hợp với API GATEWAY.
  5. Cách “đẩy ” một hàm AWS Lambda từ API gateway.

ĐẦU TIÊN TA HIỂU AWS LAMBDA LÀ GÌ ?

AWS (Amazon Web Service) Lambda là một dịch vụ theo nhu cầu của AWS nhẳm chạy mã code của bạn từ HTTP request hoặc sự kiện (event) để trả về kết qủa(response).

Ví dụ:


(Sự kiện) Event (Thực thi) Action
Image added to S3 Image is processed
HTTP Request via API Gateway HTTP Response
Log file added to Cloudwatch Analyze the log
Scheduled event Back up files
Scheduled event Synchronization of files


Như trên bạn thấy Action sẽ thực thi khi nhận được một sự kiện nào đó.

Như trên bạn thấy bạn có thể chạy một đoạn mã code hay một ứng dụng bất kỳ không cần phải có sẵn hay một thiết bị server quản trị nào. Và AWS Lambda chỉ tính phí trong thời gian thực thi sự kiện, ngoài thơi gian thực thi mã code AWS không tính bất kỳ chi phí nào. Đây con gọi là “serverless” computing, gọi nôm na là : chạy ứng dụng hay đoạn mã không cần server vật lý.

THIẾT LẬP CẤU HÌNH CƠ BẢN:

Bạn tải (clone) mã code từ git về:

$ git clone https://github.com/realpython/aws-lambda-code-execute \
  --branch v1 --single-branch
$ cd aws-lambda-code-execut
Sau đó lấy code trên tags/v1 trên branch master.

$ git checkout tags/v1 -b master

Cây cấu trúc của đoạn code như sau:

├── README.md
├── assets
│   ├── main.css
│   ├── main.js
│   └── vendor
│       ├── bootstrap
│       │   ├── css
│       │   │   ├── bootstrap-grid.css
│       │   │   ├── bootstrap-grid.min.css
│       │   │   ├── bootstrap-reboot.css
│       │   │   ├── bootstrap-reboot.min.css
│       │   │   ├── bootstrap.css
│       │   │   └── bootstrap.min.css
│       │   └── js
│       │       ├── bootstrap.js
│       │       └── bootstrap.min.js
│       ├── jquery
│       │   ├── jquery.js
│       │   └── jquery.min.js
│       └── popper
│           ├── popper.js
│           └── popper.min.js
└── index.html
Khi chạy code phía trên sẽ xuất hiện một khung [form] để bạn có thể viết một hàm nào đó bất kỳ để kết nối với API Gateway thông qua 1 AJAX request.

THIẾT LẬP LAMBDA

Bạn vào AWS Console, chuyển qua trang LAMBDA và click vào “Create a function”


Tạo một hàm (function)

Các bước:
1: Chọn : chọn blueprint: sau đó click vào “Author from Cratch” để mở ra một function trống.


2. Cấu hình triggers: Chúng ta sẽ thiết lập API Gateway tích hợp sau, nên bạn bỏ qua bước này mà bấm “Next”
3. Cấu hình hàm : Tên của hàm : excute_python_code , sau đó thêm vào một mô tả : - Excute user- suppied Python code. Phần “runtime” chọn “Python3.6”


Trong phần soạn phát triển mã, bạn định nghĩa hàm lambda_handler như bên dưới:

import sys
from io import StringIO


def lambda_handler(event, context):
    # get code from payload
    code = event[‘answer’]
    test_code = code + ‘\nprint(sum(1,1))’
    # capture stdout
    buffer = StringIO()
    sys.stdout = buffer
    # execute code
    try:
        exec(test_code)
    except:
        return False
    # return stdout
    sys.stdout = sys.stdout
    # check
    if int(buffer.getvalue()) == 2:
        return True
    return False
Đoạn mã code trên là chúng ta parse một JSON “\nprint(sum(1,1))” và chạy hàm thực thi exec, hàm thực thi này sẽ thực thi mã python đó .



Dưới phần “Lambda function handler and role” để mặc định và chọn “Create a new Role from template(s)” từ khung sổ xuống. Bạn đặt tên role ví dụ : api_gateway_access và chọn “Simple Microservice permissions” cho phần “Policy templates”. Policy này cung cấp việc truy cập vào API Gateway.



Click “Next”

KIỂM TRA:

Tiếp tục click nút “Test” để thực thi Lambda.


Bạn sử dụng sự kiện mẫu có sẵn “Hello world”



Sau đó bấm nút “Save and test” và kết quả hiển thị là :


Như vây thì bây giờ mình có thể chuyển sang cấu hình API Gateway để trigger, từ 1 form subbmit với metho POST request.

THIẾT LẬP API GATEWAY.

API GATEWAY được dùng để định nghĩa và lưu trữ các API. Trong ví dụ của bài viết này chung ta tạo một HTTP POST để hàm LAMBDA trigger vào. khi một HTTP request vào nó sẽ trả về kết quả từ việc chạy hàm lambda. Kết qủa trả về là : True hoặc False.

Các bước:

1. Tạo API
2. Kiểm tra
3. Bật tính năng CORS
4. Triển khai API
5. Kiểm tra API dùng cURL

TẠO API:

Để bắt đầu từ trang : API Gateway , click vào nút “Get Started” để tạo một API:


2. Chọn “New API” sau đó thêm các thông tin mô tả cho API đó như : code_excute_api :



Bấm “Create API”

Sau đó chọn “Resource ” từ Action menu:





(còn tiếp ... )





Nhận xét

Bài đăng phổ biến từ blog này

Trang web medium.com chết, vì sao ?

Cách sử dụng sys.argv trong python.

Thiết kế một RESTful API bằng python và flask.