AWS インフラ構成
概要
GMAC MEOサービスのAWSインフラ構成。アカウントID: 635388747933、リージョン: ap-northeast-1(東京)。
2つのシステムで構成される:
- GMAC(Webアプリケーション): PHP 7.1.3+ / Laravel 5.7 + Vue.js 2.6
- スクレイピング(バッチ処理): Python 3.10 / Django 5.0.2 + Playwright
ネットワーク設計
VPC
| 項目 | 値 | リソースID |
|---|---|---|
| CIDR | 10.0.0.0/16 | vpc-0b4c742f84f3b2d9d |
| リージョン | ap-northeast-1(東京) | - |
| DNS ホスト名 | 有効 | - |
サブネット
| サブネット | CIDR | AZ | 用途 | リソース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 |
インターネットゲートウェイ
| 項目 | リソースID |
|---|---|
| IGW | igw-0957b97f65693ab4a |
セキュリティグループ
| SG名 | インバウンド | 用途 | リソースID |
|---|---|---|---|
| h2t-sg-ecs | - | ECS タスク | sg-0934564554eed76fd |
| h2t-sg-rds | 3306 from sg-ecs, sg-lambda, sg-bastion | RDS | sg-0da2ee22cbed849d2 |
| h2t-sg-lambda | - | Lambda関数 | sg-0ccad01d56a1b4327 |
| h2t-sg-bastion | 22 from 0.0.0.0/0 | 踏み台サーバー | sg-0c0c476e11390e8e2 |
ストレージ(S3)
スクレイピング用
| バケット名 | 用途 |
|---|---|
h2t-scraping-production | スクリーンショット・スクレイピング結果 |
GMACアプリ用
| バケット名 | 用途 |
|---|---|
h2t-gmac-posts-images | 投稿画像 |
h2t-gmac-cta-images | 口コミ依頼CTA画像 |
h2t-gmac-reports | レポートファイル |
h2t-gmac-user-logo | ユーザーロゴ |
コンテナレジストリ(ECR)
GMACアプリ
| リポジトリ | 用途 | URI |
|---|---|---|
h2t-gmac-app | PHP-FPM(Laravel) | 635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-gmac-app |
h2t-gmac-nginx | Nginx リバースプロキシ | 635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-gmac-nginx |
スクレイピング
| リポジトリ | 用途 | URI |
|---|---|---|
h2t-scraper | Django スクレイピングアプリ | 635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-scraper |
h2t-scraper-nginx | Nginx リバースプロキシ | 635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-scraper-nginx |
h2t-fetch-search | py_fetch_search スクレイパー | 635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-fetch-search |
データベース(RDS)
| 項目 | 値 |
|---|---|
| インスタンスID | h2t-db |
| エンドポイント | h2t-db.chs6y0a8uk7h.ap-northeast-1.rds.amazonaws.com |
| エンジン | MySQL 8.0 |
| インスタンスクラス | db.t3.micro |
| ストレージ | 20 GB (gp3) |
| Multi-AZ | 無効(コスト削減) |
| バックアップ保持期間 | 7日 |
| 自動マイナーバージョンアップ | 有効 |
| マスターユーザー | h2t_admin |
| パブリックアクセス | 無効 |
| サブネットグループ | h2t-db-subnet |
| セキュリティグループ | sg-0da2ee22cbed849d2 |
データベース一覧
1つのRDSインスタンスに複数のデータベースを作成して使用する。
| データベース名 | 用途 | 接続元 |
|---|---|---|
gmac | GMACアプリのメインDB(ユーザー、ロケーション、口コミ、投稿等) | GMAC(Laravel)、スクレイピング |
scraper | スクレイピング結果・プロセスログの集約DB | スクレイピング(Django)、Lambda |
将来的な改善
トラフィック増加時はRead Replicaを追加し、GMACアプリからの参照クエリを分散させる。
コンピュート(ECS Fargate)
クラスター
| 項目 | 値 |
|---|---|
| クラスター名 | h2t-scraping |
| 起動タイプ | Fargate |
タスク定義
h2t-gmac(PHP-FPM + Nginx)
GMACアプリケーション。ユーザー向けWebサービス。
| 項目 | 値 |
|---|---|
| CPU | 0.5 vCPU |
| メモリ | 1 GB |
| コンテナ | app (PHP-FPM:9000), nginx (80) |
| ログ | /ecs/h2t-gmac(保持30日) |
h2t-scraper(Django + Nginx)
スクレイピング管理アプリケーション。
| 項目 | 値 |
|---|---|
| CPU | 0.5 vCPU |
| メモリ | 1 GB |
| コンテナ | django (8000), nginx (80) |
| ログ | /ecs/h2t-scraper(保持30日) |
h2t-fetch-search(スクレイピング実行)
Google検索ランキングのスクレイピングを実行するバッチ処理。
| 項目 | 値 |
|---|---|
| CPU | 1 vCPU |
| メモリ | 2 GB |
| コンテナ | fetch-search |
| ログ | /ecs/h2t-fetch-search(保持30日) |
Lambda関数
| 関数名 | 用途 | ランタイム | タイムアウト | メモリ |
|---|---|---|---|---|
h2t-fetch-search-ranking | Batchジョブ投入(キーワードスクレイピング) | Python 3.10 | 300秒 | 256 MB |
h2t-sync-database | GMACからスクレイピングDBへのデータ同期 | Python 3.10 | 300秒 | 256 MB |
h2t-sync-result-fetch-search | スクレイピング結果のGMACへの同期 | Python 3.10 | 300秒 | 256 MB |
h2t-retry-failed-keywords | 失敗キーワードのリトライ | Python 3.10 | 300秒 | 256 MB |
Lambda実行ロール
| 項目 | 値 |
|---|---|
| ロール名 | h2t-lambda-execution-role |
| ポリシー | AWSLambdaBasicExecutionRole, AWSLambdaVPCAccessExecutionRole, H2tLambdaPolicy |
踏み台サーバー(SSH)
ローカルからRDSに接続するための踏み台EC2。SSHトンネルでポートフォワーディングする。
| 項目 | 値 |
|---|---|
| インスタンスID | i-0caa19427b6224800 |
| インスタンスタイプ | t3.micro |
| AMI | Amazon Linux 2023 |
| サブネット | h2t-public-1a |
| セキュリティグループ | sg-0c0c476e11390e8e2(h2t-sg-bastion) |
| パブリックIP | 52.198.230.146 |
| キーペア | h2t-bastion(秘密鍵はAWSアカウント情報を参照) |
RDSへの接続方法
bash
# 秘密鍵を保存(暗号化ページからコピー)
vi ~/.ssh/h2t-bastion.pem
chmod 400 ~/.ssh/h2t-bastion.pem
# SSHトンネル開始(ローカル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別ターミナルでMySQLクライアントから接続:
bash
mysql -h 127.0.0.1 -P 13306 -u h2t_admin -pローカルポート
ローカルのMySQLとの競合を避けるため、ポート 13306 を使用している。
メール送信(SES)
| 項目 | 値 |
|---|---|
| 用途 | 招待メール、通知、パスワードリセット |
| リージョン | ap-northeast-1 |
| 接続 | SMTP (email-smtp.ap-northeast-1.amazonaws.com:587 TLS) |
IAM設計
詳細は IAM設計 を参照。
| ロール/ユーザー | 用途 | 権限 |
|---|---|---|
ecsTaskExecutionRole | ECS タスク実行 | ECR pull、CloudWatch Logs |
ecsTaskRole | アプリからAWSサービスアクセス | S3、SES |
h2t-lambda-execution-role | Lambda実行 | Batch、EventBridge、S3、VPC |
gitlab-deployer | GitLab CI/CDデプロイ | ECR push、ECS update-service |
h2t-app | GMACアプリ(Laravel) | S3、SES |
h2t-scraper | スクレイピング(Django) | S3、Batch、Lambda、CloudWatch |