[Phần 1] Xây dựng RESTful API hoàn chỉnh với AWS Lambda + Cognito + MySQL

thuongnn
6 min readMay 19, 2019

--

Có một lần đi xem bảo vệ đồ án của một anh cùng phòng, mình đã tình cờ biết đến kiến trúc Serverless và Amazon AWS. Sau một thời gian tìm hiểu và vọc code, mình bắt đầu series này để chia sẻ lại những kiến thức mà mình tìm hiểu và tích lũy được.

Trong series bài viết này mình sẽ hướng dẫn mọi người cách sử dụng kiến trúc Serverless để xây dựng một RESTful API hoàn chỉnh trong một dự án. Để hiểu rõ hơn về các dịch vụ của Amazon được sử dụng trong series này thì mình sẽ đi tìm hiểu về nó trước đã nhé :3

Kiến trúc Serverless là gì?

“Serverless computing là mô hình thực thi điện toán đám mây trong đó nhà cung cấp đám mây chạy máy chủ và tự động quản lý việc phân bổ tài nguyên máy. Giá cả được dựa trên lượng tài nguyên thực tế được sử dụng bởi một ứng dụng, thay vì dựa trên các đơn vị năng lực được mua trước — wikipedia

Serverless được dùng để chỉ 2 khái niệm mô hình dịch vụ là: BaaS — Backend as a Service FaaS — Function as a Service. Có khá nhiều bài viết về Serverless các bạn có thể tìm đọc thêm, ở đây mình sẽ chỉ tập trung vào FaaS.

Một số trường hợp khác, lập trình viên phải tự viết code để làm back-end. Với mô hình client-server thông thường, ta phải thuê server rồi deploy ứng dụng lên server. Với mô hình serverless, thay vì deploy code này lên server, ta deploy nó đưới dạng một Function (Function as a Service — FaaS). Hiện nay có 3 ông kẹ đang cung cấp mô hình dịch vụ FaaS là Amazon (Lambda Function), Microsoft (Azure Function), Gooogle (Cloud Function).

Bảng so sánh 3 dịch vụ

Thực tế thì mình chưa dùng hết cả 3 dịch vụ cung cấp trên nhưng mình thấy Amazon AWS ngoại trừ cái document như sh*t thì thấy rất ổn, vì vậy series này mình sẽ làm việc với AWS Lambda như đã nói ở tiêu đề nhé. Trước hết thì mình sẽ nói thêm về các dịch vụ Amazon AWS sẽ được dùng trong dự án:

Serverless Basic Web Reference Architecture

API Gateway

“Amazon API Gateway là dịch vụ được quản lý hoàn toàn giúp các nhà phát triển dễ dàng tạo, phát hành, duy trì, giám sát và bảo vệ API ở mọi quy mô. Chỉ với vài cú nhấp chuột trên Bảng điều khiển quản lý AWS, bạn có thể tạo các API REST và WebSocket hoạt động giống như “cửa trước” để các ứng dụng truy cập dữ liệu, logic nghiệp vụ hoặc chức năng từ các dịch vụ phụ trợ — Amazon”.

Mọi người có thể hiểu API Gateway là cái cửa khẩu quốc tế :3 bất cứ ai đi qua đều phải xuất trình hộ chiếu (AWS Cognito), tùy vào điểm đến bên trong có thể có những điểm đến (Lambda Function) cần phải bảo mật hoặc bị cấm với một số người không được phép đến những nơi đó :D

Thậm chí cái cửa khẩu quốc tế đặc biệt này còn làm được hơn thế nữa, nó tiếp nhận và xử lý lên đến hàng trăm nghìn người đi vào đồng thời bao gồm các công việc giám sát, xác thực và kiểm soát truy cập.

Chi phí để sử dụng API Gateway giống với AWS Lambda, với mỗi account thì sẽ được free 1 triệu request đầu tiên cho mỗi tháng. Có thể tìm hiểu thêm ở đây:https://aws.amazon.com/vi/api-gateway/pricing/

AWS Cognito

“Amazon Cognito cho phép bạn bổ sung tính năng đăng ký, đăng nhập và kiểm soát truy cập người dùng vào trang web và ứng dụng di động một cách nhanh chóng và dễ dàng. Amazon Cognito có quy mô lên tới hàng triệu người dùng và hỗ trợ đăng nhập thông qua các nhà cung cấp định danh mạng xã hội như Facebook, Google và Amazon, cũng như các nhà cung cấp định danh doanh nghiệp thông qua SAML 2.0 — Amazon”.

Đây chính là cái hộ chiếu của người dùng dùng để đi đến những điểm đến mà họ muốn :3 Chính xác thì AWS Cognito sẽ thay ta quản lý toàn bộ người dùng đăng nhập vào hệ thống, xác thực tin nhắn, định danh, phân quyền người dùng,… Và dễ dàng tích hợp vào hệ thống.

Điều quan trọng nhất mà mình quan tâm chính là chi phí, AWS Cognito sẽ free cho 50.000 người dùng đầu tiên và sẽ tính phí trên mỗi người dùng tiếp theo. Nếu dự án của mọi người không quá lớn thì với 50.000 người dùng là đủ dùng rồi. Mọi người cũng có thể tìm hiểu thêm về chi phí ở đây:
https://aws.amazon.com/vi/cognito/pricing

Amazon RDS for MySQL

“Amazon Relational Database Service (Amazon RDS) là một dịch vụ được quản lý giúp bạn dễ dàng thiết lập, vận hành và thay đổi quy mô cơ sở dữ liệu quan hệ trên đám mây. Dịch vụ này cung cấp tính năng hiệu quả về chi phí và có thể thay đổi quy mô, trong khi vẫn quản lý được các tác vụ quản trị cơ sở dữ liệu tiêu tốn nhiều thời gian, giúp bạn thoải mái tập trung vào các ứng dụng và công việc của bạn — Amazon”.

AWS RDS có hỗ trợ rất nhiều công cụ cơ sở dữ liệu ví dụ như: PostgreSQL, Oracle, MySQL, SQL Server,… Trong series này mình sẽ sử dụng MySQL làm cơ sở dữ liệu chính, đối với tài khoản AWS mới tạo mọi người có thể sử dụng miễn phí 1 năm với những option bị giới hạn (db.t2.micro — 1 vCPU, 1 GiB RAM). Sau 1 năm Amazon sẽ bắt đầu tính phí sử dụng dịch vụ, bạn có thể tìm hiểu thêm về chi phí sử dụng ở đây:
https://aws.amazon.com/vi/rds/pricing

Tạo tài khoản Amazon AWS

Đã nói rất nhiều về mấy món dịch vụ ngon-bổ-miễn phí của Amazon ở trên, để được gói free này mọi người cần phải tạo một tài khoản AWS. Click vào link này để tới trang đăng kí:
https://portal.aws.amazon.com/billing/signup#/start

Lưu ý: Để đă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 sau khi xác nhận xong.

Thường thì đối với sinh viên như mình thì lương chưa đủ điều kiện mở thẻ tín dụng credit :3 Nếu có ai đang dùng TP Bank thì có thể đăng kí dùng thẻ e-money (đăng kí online xong họ sẽ cấp thẻ luôn cho mình nhé) rất tiện đỡ phải đi lại ra ngân hàng. Mọi người cần phải nạp vào thẻ 50k để cho Amazon AWS xác nhận nữa là xong :3

Tổng kết

Vậy là mọi người cũng hiểu qua qua về kiến trúc Serverless, 1 vài dịch vụ của Amazon và tạo thành công tài khoản Amazon AWS rồi, trong phần tới mình sẽ hướng dẫn tạo trang đăng nhập sử dụng AWS CognitoAmplify. Cảm ơn mọi người đã bỏ chút thời gian xem bài viết của mình ❤

Link phần 2: https://thuongnn.me/phan-2-xay-dung-restful-api-hoan-chinh-voi-aws-lambda-cognito-mysql/

Tài liệu tham khảo:
https://medium.com/tech-travelstart/using-kotlin-in-a-serverless-architecture-with-aws-lambda-part-3-designing-and-implementing-a-c6db62760c9a
https://toidicodedao.com/2017/03/07/giai-thich-kien-truc-serverless
https://en.wikipedia.org/wiki/Serverless_computing

--

--

thuongnn
thuongnn

Written by thuongnn

An engineer who is young, talented, creative, passionate in working, and always puts effort into self-improving knowledge and skills in the IT field.

No responses yet