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 Thông tin tài khoản AWS) |
Cách kết nối RDS
bash
# Lưu private key (copy từ trang mã hóa)
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:
bash
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 |