Chuyển đến nội dung chính

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

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

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

sys.argv là môt danh sách [list] trong python, nó được sư dụng khi bạn chạy một lệnh command-line nào đó trên hệ thống.
Và argument này được đẩy vào script python để thực thi khi chạy câu lệnh.

Ví dụ: python sys.argv arg1 arg2

Trước tiên bạn phải import mô đun sys trong script.



import sys print"This is the name of the script: ", sys.argv[0]print"Number of arguments: ", len(sys.argv)print"The arguments are: ", str(sys.argv)

Tên của script này : sysargv.py
Số lượng arg là : 1
Arg là : ['sysargv.py']


python test1020.py 111 This is the name of the script:  test1020.py
Number of arguments:  2
The arguments are:  ['test1020.py', '111']

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

Như các bạn đã biết thì REST viết tắt bởi REpresentational State Transfer. Bạn có thể tham khảo thêm ở đây.

Vậy REST là gì:

Có 6 yếu tố của REST như sau:

1. Client-Server: phía server side phục vụ như một service còn phía client sẽ dùng service này.

2.Stateless:  Mỗi request từ client phải chứa tất cả các thông tin mà phía server yêu cầu phải có. Nói nôm na là mỗi request chứa các thông tin riêng rẽ không liên quan đến những request khác.

3. Cacheable : Phía server side phải cảnh báo chỉ ra cho client side biết là request đó có cache hay không.

4. Hệ thống phân lớp: Giao tiếp giữa server side và client side có thể thông qua lớp trung gian ở giữa để trả lời các request được gọi mà không cân phía client phải làm những động tác khác nữa.

5. Các cổng giao tiếp là giống nhau : Các phương thức giao tiếp giữa client và server là khuôn mẫu giống nhau.

6. Mã code linh động. Phía server có thể thực thi cho môt API gọi duy nhất mà không ảnh hưởng tới các API khác.

RESTful web service là gì :

Kiế…

Cài đặt docker trên windows server 2016.

1. Cài đặt Windows Server 2016 Container Feature:  Mở PowerShell : Cài đặt các container feature dùng powershell: Dùng lệnh: InstallWindowsFeature containers Restart lại windows: 2. Cài đặt windows server 2016 base image:  Cài đặt mô đun : ContainerImage Dùng lệnh: Install-PackageProvider ContainerImage -force List các image có giá trị: Cài đặt Windows Server Core : 3. Cài đặt docker trên windows server 2016. Download script để cài đặt docker : Chạy script : Kiểm tra các image có trên server :