Cấu trúc hạ tầng AWS
Tổng quan
Cấu trúc hạ tầng AWS của dịch vụ GMAC MEO. Account ID: 635388747933, Region: ap-northeast-1 (Tokyo).
Hệ thống bao gồm 2 thành phần:
- GMAC (Ứng dụng Web): PHP 7.1.3+ / Laravel 5.7 + Vue.js 2.6
- Scraping (Xử lý batch): Python 3.10 / Django 5.0.2 + Playwright
Thiết kế mạng
VPC
| Mục | Giá trị | Resource ID |
|---|---|---|
| CIDR | 10.0.0.0/16 | vpc-0b4c742f84f3b2d9d |
| Region | ap-northeast-1 (Tokyo) | - |
| DNS hostname | Enabled | - |
Subnet
| Subnet | CIDR | AZ | Mục đích | Resource ID |
|---|---|---|---|---|
| h2t-public-1a | 10.0.1.0/24 | ap-northeast-1a | ALB | subnet-0ff23c0ce66750053 |
| h2t-public-1c | 10.0.2.0/24 | ap-northeast-1c | ALB | subnet-0ebe6abb3572271e8 |
| h2t-private-1a | 10.0.11.0/24 | ap-northeast-1a | ECS, RDS, Lambda, ElastiCache | subnet-095de9e00c1894a0c |
| h2t-private-1c | 10.0.12.0/24 | ap-northeast-1c | RDS (MultiAZ) | subnet-0f38ab1dce252e375 |
Internet Gateway
| Mục | Resource ID |
|---|---|
| IGW | igw-0957b97f65693ab4a |
Security Group
| Tên SG | Inbound | Mục đích | Resource ID |
|---|---|---|---|
| h2t-sg-ecs | - | ECS Task | sg-0934564554eed76fd |
| h2t-sg-rds | 3306 from sg-ecs, sg-lambda, sg-bastion | RDS | sg-0da2ee22cbed849d2 |
| h2t-sg-lambda | - | Lambda function | sg-0ccad01d56a1b4327 |
| h2t-sg-bastion | 22 from 0.0.0.0/0 | Bastion server | sg-0c0c476e11390e8e2 |
Storage (S3)
Cho Scraping
| Tên bucket | Mục đích |
|---|---|
h2t-scraping-production | Screenshot, kết quả scraping |
Cho ứng dụng GMAC
| Tên bucket | Mục đích |
|---|---|
h2t-gmac-posts-images | Hình ảnh bài đăng |
h2t-gmac-cta-images | Hình ảnh CTA yêu cầu đánh giá |
h2t-gmac-reports | File báo cáo |
h2t-gmac-user-logo | Logo người dùng |
Container Registry (ECR)
Ứng dụng GMAC
| Repository | Mục đích | URI |
|---|---|---|
h2t-gmac-app | PHP-FPM (Laravel) | 635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-gmac-app |
h2t-gmac-nginx | Nginx reverse proxy | 635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-gmac-nginx |
Scraping
| Repository | Mục đích | URI |
|---|---|---|
h2t-scraper | Django scraping app | 635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-scraper |
h2t-scraper-nginx | Nginx reverse proxy | 635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-scraper-nginx |
h2t-fetch-search | py_fetch_search scraper | 635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-fetch-search |
Database (RDS)
| Mục | Giá trị |
|---|---|
| Instance ID | h2t-db |
| Endpoint | h2t-db.chs6y0a8uk7h.ap-northeast-1.rds.amazonaws.com |
| Engine | MySQL 8.0 |
| Instance class | db.t3.micro |
| Storage | 20 GB (gp3) |
| Multi-AZ | Disabled (tiết kiệm chi phí) |
| Backup retention | 7 ngày |
| Auto minor version upgrade | Enabled |
| Master user | h2t_admin |
| Public access | Disabled |
| Subnet group | h2t-db-subnet |
| Security group | sg-0da2ee22cbed849d2 |
Danh sách Database
Sử dụng nhiều database trong cùng một RDS instance.
| Tên database | Mục đích | Kết nối từ |
|---|---|---|
gmac | DB chính của ứng dụng GMAC (user, location, đánh giá, bài đăng, v.v.) | GMAC (Laravel), Scraping |
scraper | DB tổng hợp kết quả scraping & log process | Scraping (Django), Lambda |
Compute (ECS Fargate)
Cluster
| Mục | Giá trị |
|---|---|
| Tên cluster | h2t-scraping |
| Launch type | Fargate |
Task Definition
h2t-gmac (PHP-FPM + Nginx)
Ứng dụng GMAC. Dịch vụ Web cho người dùng.
| Mục | Giá trị |
|---|---|
| CPU | 0.5 vCPU |
| Memory | 1 GB |
| Container | app (PHP-FPM:9000), nginx (80) |
| Log | /ecs/h2t-gmac (lưu 30 ngày) |
h2t-scraper (Django + Nginx)
Ứng dụng quản lý scraping.
| Mục | Giá trị |
|---|---|
| CPU | 0.5 vCPU |
| Memory | 1 GB |
| Container | django (8000), nginx (80) |
| Log | /ecs/h2t-scraper (lưu 30 ngày) |
h2t-fetch-search (thực thi scraping)
Xử lý batch scraping thứ hạng tìm kiếm Google.
| Mục | Giá trị |
|---|---|
| CPU | 1 vCPU |
| Memory | 2 GB |
| Container | fetch-search |
| Log | /ecs/h2t-fetch-search (lưu 30 ngày) |
Lambda Function
| Tên function | Mục đích | Runtime | Timeout | Memory |
|---|---|---|---|---|
h2t-fetch-search-ranking | Submit Batch job (keyword scraping) | Python 3.10 | 300s | 256 MB |
h2t-sync-database | Đồng bộ dữ liệu từ GMAC sang scraping DB | Python 3.10 | 300s | 256 MB |
h2t-sync-result-fetch-search | Đồng bộ kết quả scraping sang GMAC | Python 3.10 | 300s | 256 MB |
h2t-retry-failed-keywords | Retry keyword thất bại | Python 3.10 | 300s | 256 MB |
Lambda Execution Role
| Mục | Giá trị |
|---|---|
| Tên role | h2t-lambda-execution-role |
| Policy | AWSLambdaBasicExecutionRole, AWSLambdaVPCAccessExecutionRole, H2tLambdaPolicy |
Bastion Server (SSH)
EC2 bastion để kết nối RDS từ local. Sử dụng SSH tunnel để port forwarding.
| Mục | Giá trị |
|---|---|
| Instance ID | i-0caa19427b6224800 |
| Instance type | t3.micro |
| AMI | Amazon Linux 2023 |
| Subnet | h2t-public-1a |
| Security Group | sg-0c0c476e11390e8e2 (h2t-sg-bastion) |
| Public IP | 52.198.230.146 |
| Key pair | h2t-bastion (private key: xem「🔒 Tài khoản AWS (Prod)」ở sidebar) |
Phạm vi phân phối trang thông tin xác thực
Trang thông tin xác thực chỉ được phân phối qua GitLab Pages dành cho nội bộ. Cloudflare Pages công khai không cần xác thực nên trang này bị loại trừ khi build. Nếu bạn đang xem trang này ở bản phân phối công khai thì trang thông tin xác thực không tồn tại.
Cách kết nối RDS
# Lưu private key (copy từ trang thông tin tài khoản AWS)
vi ~/.ssh/h2t-bastion.pem
chmod 400 ~/.ssh/h2t-bastion.pem
# Bắt đầu SSH tunnel (local 13306 → RDS 3306)
ssh -i ~/.ssh/h2t-bastion.pem -N -L 13306:h2t-db.chs6y0a8uk7h.ap-northeast-1.rds.amazonaws.com:3306 ec2-user@52.198.230.146Kết nối MySQL client từ terminal khác:
mysql -h 127.0.0.1 -P 13306 -u h2t_admin -pPort local
Sử dụng port 13306 để tránh xung đột với MySQL local.
Gửi email (SES)
| Mục | Giá trị |
|---|---|
| Mục đích | Email mời, thông báo, reset mật khẩu |
| Region | ap-northeast-1 |
| Kết nối | SMTP (email-smtp.ap-northeast-1.amazonaws.com:587 TLS) |
Thiết kế IAM
Chi tiết xem Thiết kế IAM.
| Role/User | Mục đích | Quyền |
|---|---|---|
ecsTaskExecutionRole | Thực thi ECS Task | ECR pull, CloudWatch Logs |
ecsTaskRole | Truy cập AWS từ ứng dụng | S3, SES |
h2t-lambda-execution-role | Thực thi Lambda | Batch, EventBridge, S3, VPC |
gitlab-deployer | Deploy GitLab CI/CD | ECR push, ECS update-service |
h2t-app | Ứng dụng GMAC (Laravel) | S3, SES |
h2t-scraper | Scraping (Django) | S3, Batch, Lambda, CloudWatch |