Saturday, September 21, 2024

[AWS] Mobile Application MyTodoList

-

Mobile Application My TodoList

Chúng ta muốn tạo ra một ứng dụng di động với các yêu cầu sau đây: • Phơi bày dưới dạng REST API với HTTPS • Kiến trúc không có máy chủ (serverless architecture) • Người dùng nên có thể tương tác trực tiếp với thư mục của họ trên S3 • Người dùng nên xác thực thông qua một dịch vụ serverless quản lý • Người dùng có thể viết và đọc các việc cần làm (to-dos), nhưng chủ yếu là đọc chúng • Cơ sở dữ liệu nên có thể mở rộng và có một lưu lượng đọc cao

Để thực hiện các yêu cầu trên, ta có thể sử dụng các công nghệ như sau:

  • AWS Lambda: AWS Lambda là một dịch vụ tính toán không có máy chủ, cho phép chúng ta thực thi mã mà không cần phải quản lý các máy chủ riêng của mình. Chúng ta có thể sử dụng Lambda để triển khai API REST, đảm bảo API của chúng ta được bảo mật với HTTPS.
  • Amazon S3: Amazon S3 là một dịch vụ lưu trữ đối tượng, cho phép chúng ta lưu trữ và truy xuất dữ liệu từ bất kỳ đâu trên web. Chúng ta có thể sử dụng S3 để lưu trữ các file to-do của người dùng và cho phép họ trực tiếp tương tác với thư mục của họ trên S3.
  • Amazon Cognito: Amazon Cognito là một dịch vụ xác thực người dùng và quản lý truy cập, cho phép chúng ta xác thực người dùng của chúng ta một cách an toàn và quản lý quyền truy cập của họ đến các tài nguyên của chúng ta. Chúng ta có thể sử dụng Cognito để xác thực người dùng của chúng ta và cho phép họ truy cập vào các file to-do của họ trên S3.
  • Amazon DynamoDB: Amazon DynamoDB là một dịch vụ cơ sở dữ liệu không cần máy chủ, có khả năng mở rộng tuyến tính và đảm bảo tốc độ đọc cao. Chúng ta có thể sử dụng DynamoDB để lưu trữ các file to-do của người dùng và đảm bảo rằng chúng được lưu trữ một cách an toàn và có khả năng mở rộng.

Mobile app: REST API layer

Sơ đồ hoạt động này miêu tả cách mà một ứng dụng di động với REST API layer sử dụng các dịch vụ của Amazon Web Services để xử lý yêu cầu của người dùng.

  • Mobile client gửi yêu cầu REST API đến ứng dụng của chúng ta thông qua kết nối HTTPS. Yêu cầu này có thể là để đọc hoặc ghi các việc cần làm (to-do).
  • Amazon API Gateway nhận yêu cầu từ ứng dụng di động và chuyển tiếp nó đến AWS Lambda. Lambda là một dịch vụ tính toán không có máy chủ (serverless) cho phép chúng ta thực thi mã mà không cần quản lý máy chủ.
  • Lambda truy vấn cơ sở dữ liệu DynamoDB để lấy dữ liệu cần thiết cho yêu cầu từ ứng dụng di động. DynamoDB là một dịch vụ cơ sở dữ liệu không cần máy chủ (serverless) với khả năng mở rộng tuyến tính và đảm bảo tốc độ đọc cao.
  • Sau khi nhận được dữ liệu từ DynamoDB, Lambda trả về kết quả cho API Gateway.
  • API Gateway gửi kết quả về cho ứng dụng di động qua kết nối HTTPS. Ứng dụng di động có thể hiển thị kết quả cho người dùng.
  • Trước khi được truy cập vào dịch vụ, người dùng cần xác thực thông qua Amazon Cognito. Cognito là một dịch vụ quản lý đăng nhập và xác thực người dùng của AWS.
  • Khi người dùng xác thực thành công, Cognito sẽ trả về một mã xác thực cho ứng dụng di động.
  • Ứng dụng di động gửi mã xác thực cho API Gateway. API Gateway sử dụng Cognito để xác thực mã này và xác định quyền truy cập của người dùng đến các tài nguyên của chúng ta.

Mobile app: giving users access to S3

Sơ đồ hoạt động này miêu tả cách thức cho phép người dùng truy cập vào thư mục của họ trong Amazon S3, một dịch vụ lưu trữ đối tượng của AWS, thông qua ứng dụng di động và các dịch vụ khác của AWS.

  • Mobile client sử dụng Amazon S3 để lưu trữ hoặc truy xuất file của người dùng, đồng thời thực hiện các hoạt động quản lý quyền truy cập cho các file này.
  • Người dùng cần xác thực thông qua Amazon Cognito để truy cập vào Amazon S3. Amazon Cognito là dịch vụ xác thực, quản lý người dùng của AWS.
  • Sau khi người dùng xác thực thành công, Amazon Cognito tạo các thông tin xác thực tạm thời cho ứng dụng di động bằng cách sử dụng AWS STS (Security Token Service). Thông tin xác thực này được sử dụng để xác thực yêu cầu truy cập của người dùng cho các dịch vụ khác của AWS.
  • Mobile client gửi yêu cầu REST API đến Amazon API Gateway. Amazon API Gateway là dịch vụ điều khiển lưu lượng truy cập đến các dịch vụ AWS.
  • Amazon API Gateway gọi một hàm AWS Lambda để xử lý yêu cầu từ người dùng. AWS Lambda là một dịch vụ tính toán không có máy chủ (serverless) cho phép chúng ta thực thi mã mà không cần quản lý máy chủ.
  • Trong quá trình thực hiện, hàm AWS Lambda có thể sử dụng Amazon DynamoDB để lưu trữ hoặc truy xuất dữ liệu liên quan đến yêu cầu từ người dùng. DynamoDB là một dịch vụ cơ sở dữ liệu không cần máy chủ (serverless) với khả năng mở rộng tuyến tính và đảm bảo tốc độ đọc cao.
  • Hàm AWS Lambda cũng sử dụng thông tin xác thực tạm thời từ AWS STS để xác thực yêu cầu truy cập của người dùng vào Amazon S3.
  • Khi AWS Lambda hoàn tất xử lý yêu cầu, nó trả kết quả về cho Amazon API Gateway. Amazon API Gateway chuyển tiếp kết quả này cho ứng dụng di động qua kết nối HTTPS.
  • Ứng dụng di động hiển thị kết quả cho người dùng hoặc thực hiện các hoạt động tiếp theo trên Amazon S3 thông qua các API được cung cấp bởi AWS.

Mobile app: high read throughput, static data

Sơ đồ hoạt động này miêu tả quá trình lưu trữ và truy xuất file trên Amazon S3 và truy vấn dữ liệu từ DynamoDB, một cơ sở dữ liệu không cần máy chủ (serverless) của AWS, thông qua một lớp bộ nhớ cache DAX, sử dụng các dịch vụ của AWS như Amazon Cognito, AWS STS, Amazon API Gateway và AWS Lambda.

  • Mobile client lưu trữ và truy xuất file trên Amazon S3. Các file này được quản lý thông qua các quyền truy cập được xác định trước.
  • Người dùng cần xác thực thông qua Amazon Cognito để sử dụng ứng dụng di động. Amazon Cognito là dịch vụ xác thực và quản lý người dùng của AWS.
  • Sau khi người dùng xác thực thành công, Amazon Cognito tạo thông tin xác thực tạm thời cho ứng dụng di động bằng cách sử dụng AWS STS (Security Token Service). Thông tin xác thực này được sử dụng để xác thực yêu cầu truy cập của người dùng cho các dịch vụ khác của AWS.
  • Mobile client gửi yêu cầu REST API đến Amazon API Gateway. Amazon API Gateway là dịch vụ điều khiển lưu lượng truy cập đến các dịch vụ AWS.
  • Amazon API Gateway xác thực yêu cầu từ người dùng thông qua Amazon Cognito và đảm bảo rằng người dùng được phép thực hiện yêu cầu.
  • Amazon API Gateway gọi một hàm AWS Lambda để xử lý yêu cầu từ người dùng. AWS Lambda là một dịch vụ tính toán không có máy chủ (serverless) cho phép thực thi mã mà không cần quản lý máy chủ.
  • Trong quá trình thực hiện, hàm AWS Lambda có thể sử dụng cơ sở dữ liệu DynamoDB để lưu trữ hoặc truy xuất dữ liệu liên quan đến yêu cầu từ người dùng.
  • Trước khi truy xuất dữ liệu từ DynamoDB, yêu cầu của người dùng truy vấn một lớp bộ nhớ cache DAX. DAX cung cấp khả năng truy xuất nhanh và đáng tin cậy cho các ứng dụng lưu trữ dữ liệu trên DynamoDB.
  • Nếu dữ liệu yêu cầu không có sẵn trong DAX, AWS Lambda sẽ tiếp tục truy vấn vào DynamoDB để lấy dữ liệu. Sau đó, dữ liệu này sẽ được lưu trữ trong DAX cho các truy vấn sau. Nếu có sự cố xảy ra trong quá trình này, ví dụ như truy vấn DynamoDB thất bại, AWS Lambda sẽ trả về lỗi cho Amazon API Gateway. Sau đó, Amazon API Gateway sẽ trả về mã lỗi HTTP tương ứng cho ứng dụng di động qua kết nối HTTPS.

Mobile app: caching at the API Gateway

Sau khi AWS Lambda truy vấn DynamoDB để lấy dữ liệu, nó sẽ trả về kết quả cho Amazon API Gateway. Trước khi trả kết quả cho ứng dụng di động qua kết nối HTTPS, Amazon API Gateway sẽ kiểm tra xem liệu kết quả này có được lưu trữ trong bộ nhớ đệm (cache) hay không. Nếu kết quả này đã được lưu trữ trong bộ nhớ đệm, Amazon API Gateway sẽ trả kết quả này trực tiếp cho ứng dụng di động mà không cần truy vấn đến AWS Lambda hay DynamoDB nữa.

Việc lưu trữ kết quả vào bộ nhớ đệm nhằm giảm tải cho các dịch vụ như AWS Lambda hay DynamoDB, giúp tăng tốc độ truy vấn dữ liệu và giảm chi phí hoạt động. Khi một truy vấn mới được gửi đến Amazon API Gateway và kết quả này đã được lưu trữ trong bộ nhớ đệm, Amazon API Gateway sẽ trả kết quả này trực tiếp cho ứng dụng di động, giúp giảm thời gian phản hồi của ứng dụng và tối ưu hóa trải nghiệm người dùng.

In this lecture

Ứng dụng này sử dụng mô hình serverless để triển khai REST API với các dịch vụ của AWS như HTTPS, API Gateway, Lambda và DynamoDB. Để đảm bảo tính bảo mật cho các người dùng của ứng dụng, Cognito được sử dụng để sinh ra các chứng chỉ tạm thời với STS, giúp truy cập đến tài nguyên S3 với các chính sách giới hạn quyền truy cập. Mẫu này có thể được áp dụng cho DynamoDB, Lambda và các tài nguyên AWS khác.

Để tăng tốc độ truy vấn dữ liệu và giảm chi phí hoạt động, ứng dụng sử dụng DAX để lưu trữ bộ nhớ đệm cho các yêu cầu truy vấn đến DynamoDB. Nếu kết quả đã được lưu trữ trong bộ nhớ đệm, nó sẽ được trả về trực tiếp cho ứng dụng mà không cần truy vấn đến DynamoDB.

Để tăng tốc độ phản hồi và giảm tải cho các dịch vụ, các yêu cầu REST cũng được lưu trữ trong bộ nhớ đệm tại cấp độ API Gateway. Nếu yêu cầu đã được lưu trữ trong bộ nhớ đệm, nó sẽ được trả về trực tiếp cho ứng dụng mà không cần truy vấn lại các dịch vụ khác.

Cognito được sử dụng để đảm bảo tính bảo mật cho quá trình xác thực và phân quyền cho người dùng. Nó sinh ra các chứng chỉ tạm thời để truy cập vào các tài nguyên được giới hạn quyền truy cập, đảm bảo rằng chỉ có những người dùng được phép mới có thể truy cập và sử dụng các tài nguyên của ứng dụng. Các chứng chỉ tạm thời này được sinh ra bởi STS, giúp đảm bảo rằng các chứng chỉ này chỉ tồn tại trong khoảng thời gian nhất định và sẽ bị thu hồi sau khi hết hạn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories