Skip to content

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
CIDR10.0.0.0/16vpc-0b4c742f84f3b2d9d
リージョンap-northeast-1(東京)-
DNS ホスト名有効-

サブネット

サブネットCIDRAZ用途リソース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

インターネットゲートウェイ

項目リソースID
IGWigw-0957b97f65693ab4a

セキュリティグループ

SG名インバウンド用途リソースID
h2t-sg-ecs-ECS タスクsg-0934564554eed76fd
h2t-sg-rds3306 from sg-ecs, sg-lambda, sg-bastionRDSsg-0da2ee22cbed849d2
h2t-sg-lambda-Lambda関数sg-0ccad01d56a1b4327
h2t-sg-bastion22 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-appPHP-FPM(Laravel)635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-gmac-app
h2t-gmac-nginxNginx リバースプロキシ635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-gmac-nginx

スクレイピング

リポジトリ用途URI
h2t-scraperDjango スクレイピングアプリ635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-scraper
h2t-scraper-nginxNginx リバースプロキシ635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-scraper-nginx
h2t-fetch-searchpy_fetch_search スクレイパー635388747933.dkr.ecr.ap-northeast-1.amazonaws.com/h2t-fetch-search

データベース(RDS)

項目
インスタンスIDh2t-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インスタンスに複数のデータベースを作成して使用する。

データベース名用途接続元
gmacGMACアプリのメインDB(ユーザー、ロケーション、口コミ、投稿等)GMAC(Laravel)、スクレイピング
scraperスクレイピング結果・プロセスログの集約DBスクレイピング(Django)、Lambda

将来的な改善

トラフィック増加時はRead Replicaを追加し、GMACアプリからの参照クエリを分散させる。

コンピュート(ECS Fargate)

クラスター

項目
クラスター名h2t-scraping
起動タイプFargate

タスク定義

h2t-gmac(PHP-FPM + Nginx)

GMACアプリケーション。ユーザー向けWebサービス。

項目
CPU0.5 vCPU
メモリ1 GB
コンテナapp (PHP-FPM:9000), nginx (80)
ログ/ecs/h2t-gmac(保持30日)

h2t-scraper(Django + Nginx)

スクレイピング管理アプリケーション。

項目
CPU0.5 vCPU
メモリ1 GB
コンテナdjango (8000), nginx (80)
ログ/ecs/h2t-scraper(保持30日)

h2t-fetch-search(スクレイピング実行)

Google検索ランキングのスクレイピングを実行するバッチ処理。

項目
CPU1 vCPU
メモリ2 GB
コンテナfetch-search
ログ/ecs/h2t-fetch-search(保持30日)

Lambda関数

関数名用途ランタイムタイムアウトメモリ
h2t-fetch-search-rankingBatchジョブ投入(キーワードスクレイピング)Python 3.10300秒256 MB
h2t-sync-databaseGMACからスクレイピングDBへのデータ同期Python 3.10300秒256 MB
h2t-sync-result-fetch-searchスクレイピング結果のGMACへの同期Python 3.10300秒256 MB
h2t-retry-failed-keywords失敗キーワードのリトライPython 3.10300秒256 MB

Lambda実行ロール

項目
ロール名h2t-lambda-execution-role
ポリシーAWSLambdaBasicExecutionRole, AWSLambdaVPCAccessExecutionRole, H2tLambdaPolicy

踏み台サーバー(SSH)

ローカルからRDSに接続するための踏み台EC2。SSHトンネルでポートフォワーディングする。

項目
インスタンスIDi-0caa19427b6224800
インスタンスタイプt3.micro
AMIAmazon Linux 2023
サブネットh2t-public-1a
セキュリティグループsg-0c0c476e11390e8e2(h2t-sg-bastion)
パブリックIP52.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設計 を参照。

ロール/ユーザー用途権限
ecsTaskExecutionRoleECS タスク実行ECR pull、CloudWatch Logs
ecsTaskRoleアプリからAWSサービスアクセスS3、SES
h2t-lambda-execution-roleLambda実行Batch、EventBridge、S3、VPC
gitlab-deployerGitLab CI/CDデプロイECR push、ECS update-service
h2t-appGMACアプリ(Laravel)S3、SES
h2t-scraperスクレイピング(Django)S3、Batch、Lambda、CloudWatch

システム構成図