07/09/2018, 09:56

Xây dựng một REST API với Nodejs, Lambda và API Gateway sử dụng AWS Web Console

Xin chào tất cả các bạn, ở bài trước, sau khi đã tìm hiểu Serverless là gì, hôm nay chúng ta sẽ cùng nhau đi xây dựng một REST API sử dụng giao diện điều khiển web console của aws amazon nhé. "Bài này thuộc bài số 02 trong loạt bài Xây dựng các ứng dụng không máy chủ với Nodejs, AWS ...

Xin chào tất cả các bạn, ở bài trước, sau khi đã tìm hiểu Serverless là gì, hôm nay chúng ta sẽ cùng nhau đi xây dựng một REST API sử dụng giao diện điều khiển web console của aws amazon nhé.

"Bài này thuộc bài số 02 trong loạt bài Xây dựng các ứng dụng không máy chủ với Nodejs, AWS Lambda, API Gateway, Serverless Framework và DynamoDB"

Những nội dung có trong bài này:

1. Chuẩn bị một tài khoản AWS.

2. Tạo API trong API Gateway và cấu hình tới dịch vụ Lambda Function.

1. Chuẩn bị một tài khoản AWS.

Bước đầu tiên, chắc chắn rồi, chúng ta phải có một tài khoản AWS, các bạn vào link sau để đăng ký tài khoản:

https://portal.aws.amazon.com/billing/signup#/start

Mặc định mình sẽ coi như các bạn đã làm qua bước này rồi vì cũng khó để mả hướng dẫn chi tiết phần này được. Mình có một số lưu ý sau cho các bạn chuẩn bị trước:

Như ở hình trên sau khi vào link đăng ký, các bạn có thể thấy Amazon cho chúng ta sử dụng 12 tháng gói miễn phí có giới hạn bao gồm khá nhiều dịch vụ như EC2, S3, DynamoDB, CodeBuild... Các bạn có thể nghiên cứu kỹ gói miễn phí giới hạn đó tại link này: https://aws.amazon.com/vi/free/

Để đăng ký được tài khoản AWS và nhận gói free trên thì bạn phải có một cái thẻ VISA thanh toán quốc tế, debit hay credit đều được. Và trong thẻ phải có ít nhất $$1 để Amazon xác nhận tài khoản, số tiền này sẽ được trả lại cho bạn sau vài ngày, như lần mình đăng ký thì 7 ngày sau nó mới trả lại tiền (slowmotion) (khoc) Và một lưu ý nữa trong phần này đó là gói miễn phí thì sẽ có một số dịch vụ chỉ có thể dùng ở Location bên Mỹ, ví dụ như CodeBuild, nếu chọn location là Singapore thì sẽ không sử dụng được. Yên tâm mình sẽ nói kỹ hơn cái này ở những bài tiếp theo.

2. Tạo API trong API Gateway và cấu hình tới dịch vụ Lambda Function.

Sau khi đã có tài khoản và đăng nhập vào AWS Web Console, chọn dịch vụ API Gateway. (Ấn vào mục Services gõ tìm kiếm API Gateway là sẽ thấy.)

Chọn button Create new API, còn với tài khoản mới chưa tạo API nào thì bạn sẽ thấy màn hình Get Started như dưới đây.

Có một vài cách để tạo API như Clone từ một API có sẵn, Import từ Swagger hoặc tham khảo từ một API mẫu của AWS, ở đây chúng ta đang tạo mới nên mình sẽ chọn New API:

API name*: Tên của API - Get adorable cats

Description: Mô tả API.

Enpoint type: Nơi mà API của sẽ được deploy, trong bài này mình sẽ chọn Regional, và có 3 option trong phần này mình giải thích tóm tắt lại, đó là:

Regional: API sẽ được deploy ở vùng hiện tại, cụ thể mình đang để là US East (N. Virginia)

Edge optimized: API sẽ được deploy đến mạng phân phối Cloudfront của AWS.

Private: API chỉ có thể truy cập từ VPCs (Amazon Virtual Private Cloud)

Nhấn Create API, sang bước kế tiếp, trong bảng điều khiển của API Get adorable cats mình vừa tạo, chọn Resources > Actions > Create resource

Làm tiếp bước nhập name + path cho resource, mình nhập nó là cats, rồi nhấn Create resource

Việc tiếp theo là chúng ta cần định nghĩa method cho resource này, mình sẽ tạo một method GET để lấy ra thông tin những con mèo. Đứng từ resource cats, chọn Action > Create method

Chọn method GET:

Có method rồi, bây giờ cần cấu hình dịch vụ backend mà sẽ trả về dữ liệu khi chúng ta gọi đến phương thức GET này, có nhiều dịch vụ như Lambda function, một HTTP enpoint hiện có, Mock (giả lập nội dung trả về) hoặc nhiều dịch vụ khác của AWS...vv. Mình sẽ chọn Lambda function làm backend.

Vì chưa có function nào ở dịch vụ Lambda nên bạn sẽ thấy dòng thông báo như trên, click vào Create a Lambda Function để sang tab mới của dịch vụ này. Tab API Gateway thì bạn cứ giữ nguyên, lát nữa sau khi tạo xong lambda function thì chúng ta sẽ quay lại.

Trong phần Create Lambda function, chọn Author from scratch, nhập các thông tin như hình dưới rồi ấn Create function.

Name: Tên của function - getCats

Runtime: Môi trường chạy, mình chọn Node.js 8.10, phiên bản nodejs cao nhất mà AWS hỗ trợ ở thời điểm hiện tại.

Role: chọn một role có sẵn của AWS là service-role/execute-lambda

Tiếp theo là viết code cho function getCats này, mình sẽ viết một đoạn code đơn giản trả về một mảng danh sách 2 con mèo dưới dạng chuỗi json.

/**
 * Created by trungquandev.com's author on 25/08/2018.
 */
exports.handler = async (event, context, callback) => {
    let cats = [
        {
            id: 1,
            name: "British Shorthair",
            gender: "Male",
            tagDefault: "#trungquandev"
        },
        {
            id: 2,
            name: "Russian Blue",
            gender: "Female",
            tagDefault: "#trungquandev"
        }
    ];
    
    callback(null, {
        statusCode: 200,
        body: {
            cats: cats
        }
    });
};

Nhấn Save để lưu  function.

Quay lại màn hình API Gateway ban nãy, nhập tên function vừa tạo vào phần Lambda function rồi nhấn Save. AWS sẽ hỏi bạn Add Permission to Lambda Function thì cứ ấn ok.

Sau một hồi hại não với mấy cái cấu hình này thì bây giờ đã có kết quả rồi             </div>
            
            <div class=

0