Ứng dụng rút gọn URL với AWS CDK

Tram Ho

Thiết kế

Yêu cầu

  1. API tạo URL rút gọn: input là URL cần rút gọn, output là URL được rút gọn
  2. API đọc URL rút gọn: input là URL được rút gọn
    • redirect tới trang cần được rút gọn
    • trả về lỗi nếu URL không tồn tại

Giải pháp

Giải pháp

  • Gồm 3 thành phần chính:
  1. API Gateway: API endpoint, nhận request từ user và chuyển cho Lambda funtion xử lý
  2. Lambda funtion: Xử lý logic đọc, ghi URL
  3. DynamoDB: Lưu trữ dữ liệu URL đã được rút gọn

Ngoài ra có nếu có thêm Route53 Hosted Zone và AWS Certificate Manager cho tuỳ chọn gắn API Gateway với custom domain.

Điều kiện trước tiên

Trước khi bắt đầu các bạn nên :

  1. AWS CDK (có thể tham khảo Hướng dẫn chi tiết cài đặt AWS CDK)
  2. Cài đặt AWS CLI và cài đặt AWS profile (có thể tham khảo hướng dẫn tại đây)

Cài đặt AWS CDK project

Sau khi cài đặt profile AWS CLI và AWS CDK, chúng ta tạo project AWS CDK python để xây dựng ứng dụng AWS CDK.

Cấu trúc file sau khi project được tạo

DynamoDB

Tiến hành tạo bảng mapping-table với partition_key là id

Deploy với AWS CDK

Khi kiểm tra trên AWS console, chúng ta thấy DynamoDB table đã được tạo

DynamoDB table đã được tạo trên AWS

Lambda & API Gateway

Tạo folder chứa code cho lambda function

Viết hàm xử lý handler.py cho lambda function

Thêm hàm Lambda, APIGateway vào stack và phân quyền phù hợp

  • grant_read_write_data sẽ cấp quyền đọc và ghi của dynamodb table cho lambda function, một lần nữa AWS CDK chức tỏ tính ưu việt khi làm điều này với 1 dòng lệnh thay vì phải mapping phức tạp khi sử dụng CloudFormation template.
  • add_environment tạo biến môi trường cho Lambda function
  • LambdaRestApi thêm một oneliner của AWS CDK cho việc tạp Rest API cho Lambda function + tạo API Gateway và map 2 thứ lại với nhau

Deploy với AWS CDK CLI

  • Chạy lệnh diff để thấy được changeset của stack

  • Deloy stack lên AWS Cloud

Test

  • Bạn có thể thử sử dụng ứng dụng này với URL trong phần output

Vậy là chúng ta đã hoàn thành việc xây dựng ứng dụng rút gọn URL sử dụng API Gateway, Lambda và DynamoDB được triển khai nhờ AWS CDK.
Nếu bạn muốn tiếp tục sử dụng với custom domain, bạn có thể tiếp tục làm theo bước sau.

API Gateway & Custom domain

Tạo hosted zone trên Route53

  • Bạn cần có một tên miền và tạo hosted zone trên AWS Route53 bằng console với tên miền đó. Hướng dẫn cụ thể bạn có thể tham khảo tại đây

Cài đặt biến môi trường

  • Sau khi hoàn tất việc tạp hosted zone với custom domain, bạn cần cài đặt biến môi trường (hãy export các biến tại session bạn chạy AWS CDK CLI)
  • Nếu bạn sử dụng CI/CD pipeline khi triển khai ứng dụng AWS CDK, hãy chắc chắn cài đặt các biến môi trường trước đó

AWS Route53 Hosted Zone, Targets và AWS Certificate Manager

Cài đặt các biến môi trường

  • HostedZone.from_lookup tìm hosted zone theo config tên miền (domain_name)
  • acm.CertificateValidation.from_dns sẽ tự động tạo một dns record cho việc chứng thực quyền sở hữu tên miền trên hosted zone của bạn, nếu bạn không quản lý tên miền bằng Route53, bạn cần tạo record này một cách thủ công.

Sau khi hoàn tất việc chuẩn bị source code, chúng ta có thể deploy stack lên AWS Cloud

Các resource đã được tạo trên AWS

Demo

Demo URL shortener

Sau khi truy cập vào URL rút gọn được đã tạo, chúng ta sẽ được redirect tới trang đã được yêu cầu trước đó.
Vậy là ứng dụng rút gọn URL nhỏ gọn đã được hoàn thành.

Tuy bài hướng dẫn này chỉ xây dựng một ứng dụng đơn giản, nhưng bạn có thể thấy việc sử dụng AWS CDK đã rút gọn đáng kể thời gian triển khai các tài nguyên trên AWS và giúp bạn có thể tập trung vào logic của ứng dụng.
Hãy thử bắt đầu sử dụng ngay từ bây giờ bạn nhé

Bài viết gốc

References

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo