Skip to content

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ụcGiá trịResource ID
CIDR10.0.0.0/16vpc-0b4c742f84f3b2d9d
Regionap-northeast-1 (Tokyo)-
DNS hostnameEnabled-

Subnet

SubnetCIDRAZMục đíchResource ID
h2t-public-1a10.0.1.0/24ap-northeast-1aALBsubnet-0ff23c0ce66750053
h2t-public-1c10.0.2.0/24ap-northeast-1cALBsubnet-0ebe6abb3572271e8
h2t-private-1a10.0.11.0/24ap-northeast-1aECS, RDS, Lambda, ElastiCachesubnet-095de9e00c1894a0c
h2t-private-1c10.0.12.0/24ap-northeast-1cRDS (MultiAZ)subnet-0f38ab1dce252e375

Internet Gateway

MụcResource ID
IGWigw-0957b97f65693ab4a

Security Group

Tên SGInboundMục đíchResource ID
h2t-sg-ecs-ECS Tasksg-0934564554eed76fd
h2t-sg-rds3306 from sg-ecs, sg-lambda, sg-bastionRDSsg-0da2ee22cbed849d2
h2t-sg-lambda-Lambda functionsg-0ccad01d56a1b4327
h2t-sg-bastion22 from 0.0.0.0/0Bastion serversg-0c0c476e11390e8e2

Storage (S3)

Cho Scraping

Tên bucketMục đích
h2t-scraping-productionScreenshot, kết quả scraping

Cho ứng dụng GMAC

Tên bucketMục đích
h2t-gmac-posts-imagesHình ảnh bài đăng
h2t-gmac-cta-imagesHình ảnh CTA yêu cầu đánh giá
h2t-gmac-reportsFile báo cáo
h2t-gmac-user-logoLogo người dùng

Container Registry (ECR)

Ứng dụng GMAC

RepositoryMục đíchURI
h2t-gmac-appPHP-FPM (Laravel)635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-gmac-app
h2t-gmac-nginxNginx reverse proxy635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-gmac-nginx

Scraping

RepositoryMục đíchURI
h2t-scraperDjango scraping app635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-scraper
h2t-scraper-nginxNginx reverse proxy635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-scraper-nginx
h2t-fetch-searchpy_fetch_search scraper635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-fetch-search

Database (RDS)

MụcGiá trị
Instance IDh2t-db
Endpointh2t-db.chs6y0a8uk7h.ap-northeast-1.rds.amazonaws.com
EngineMySQL 8.0
Instance classdb.t3.micro
Storage20 GB (gp3)
Multi-AZDisabled (tiết kiệm chi phí)
Backup retention7 ngày
Auto minor version upgradeEnabled
Master userh2t_admin
Public accessDisabled
Subnet grouph2t-db-subnet
Security groupsg-0da2ee22cbed849d2

Danh sách Database

Sử dụng nhiều database trong cùng một RDS instance.

Tên databaseMục đíchKết nối từ
gmacDB chính của ứng dụng GMAC (user, location, đánh giá, bài đăng, v.v.)GMAC (Laravel), Scraping
scraperDB tổng hợp kết quả scraping & log processScraping (Django), Lambda

Compute (ECS Fargate)

Cluster

MụcGiá trị
Tên clusterh2t-scraping
Launch typeFargate

Task Definition

h2t-gmac (PHP-FPM + Nginx)

Ứng dụng GMAC. Dịch vụ Web cho người dùng.

MụcGiá trị
CPU0.5 vCPU
Memory1 GB
Containerapp (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ụcGiá trị
CPU0.5 vCPU
Memory1 GB
Containerdjango (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ụcGiá trị
CPU1 vCPU
Memory2 GB
Containerfetch-search
Log/ecs/h2t-fetch-search (lưu 30 ngày)

Lambda Function

Tên functionMục đíchRuntimeTimeoutMemory
h2t-fetch-search-rankingSubmit Batch job (keyword scraping)Python 3.10300s256 MB
h2t-sync-databaseĐồng bộ dữ liệu từ GMAC sang scraping DBPython 3.10300s256 MB
h2t-sync-result-fetch-searchĐồng bộ kết quả scraping sang GMACPython 3.10300s256 MB
h2t-retry-failed-keywordsRetry keyword thất bạiPython 3.10300s256 MB

Lambda Execution Role

MụcGiá trị
Tên roleh2t-lambda-execution-role
PolicyAWSLambdaBasicExecutionRole, AWSLambdaVPCAccessExecutionRole, H2tLambdaPolicy

Bastion Server (SSH)

EC2 bastion để kết nối RDS từ local. Sử dụng SSH tunnel để port forwarding.

MụcGiá trị
Instance IDi-0caa19427b6224800
Instance typet3.micro
AMIAmazon Linux 2023
Subneth2t-public-1a
Security Groupsg-0c0c476e11390e8e2 (h2t-sg-bastion)
Public IP52.198.230.146
Key pairh2t-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.146

Kết nối MySQL client từ terminal khác:

bash
mysql -h 127.0.0.1 -P 13306 -u h2t_admin -p

Port local

Sử dụng port 13306 để tránh xung đột với MySQL local.

Gửi email (SES)

MụcGiá trị
Mục đíchEmail mời, thông báo, reset mật khẩu
Regionap-northeast-1
Kết nốiSMTP (email-smtp.ap-northeast-1.amazonaws.com:587 TLS)

Thiết kế IAM

Chi tiết xem Thiết kế IAM.

Role/UserMục đíchQuyền
ecsTaskExecutionRoleThực thi ECS TaskECR pull, CloudWatch Logs
ecsTaskRoleTruy cập AWS từ ứng dụngS3, SES
h2t-lambda-execution-roleThực thi LambdaBatch, EventBridge, S3, VPC
gitlab-deployerDeploy GitLab CI/CDECR push, ECS update-service
h2t-appỨng dụng GMAC (Laravel)S3, SES
h2t-scraperScraping (Django)S3, Batch, Lambda, CloudWatch

Sơ đồ cấu trúc hệ thống