Skip to content

インフラアーキテクチャ - 国際貨物輸送管理システム

概要

本ドキュメントでは、国際貨物輸送管理システムのインフラアーキテクチャを定義する。 コンテナ化された Spring Boot アプリケーションを AWS ECS Fargate 上で稼働させ、 RDS PostgreSQL でデータを永続化する。 Terraform によるインフラの IaC 管理と GitHub Actions による CI/CD パイプラインを整備する。

インフラ構成図

uml diagram

コンテナ化戦略

Dockerfile 設計方針

マルチステージビルドを採用し、本番イメージのサイズを最小化する。

uml diagram

Dockerfile の設計原則:

原則 内容
マルチステージビルド ビルド依存関係を本番イメージに含めない
非 root ユーザー addgroup / adduser でアプリケーション専用ユーザーを作成して実行
レイヤーキャッシュの最適化 依存関係(build.gradle)を先にコピーし、ソースコードのコピーを後にする
ヘルスチェック HEALTHCHECK で Spring Boot Actuator の /actuator/health を使用
環境変数による設定 DB 接続情報等は ENV / 実行時環境変数で注入。コードにハードコードしない

Docker Compose ローカル開発環境

uml diagram

AWS 構成

ECS Fargate 構成

設定項目 説明
クラスター名 cargo-tracker-cluster ECS クラスター
タスク定義 cargo-tracker-app Spring Boot コンテナ定義
CPU 512 (0.5 vCPU) 初期設定。負荷に応じてスケール
メモリ 1024 MB Java ヒープ設定に合わせて調整
希望タスク数 2 最小稼働台数(高可用性)
最大タスク数 6 Auto Scaling 上限
サービスディスカバリ ALB ターゲットグループ ヘルスチェック経由でルーティング

VPC・ネットワーク設計

uml diagram

セキュリティグループ設計

SG 名 インバウンドルール アウトバウンドルール 用途
sg-alb 0.0.0.0/0: 443 (HTTPS) ECS SG: 8080 ALB
sg-ecs-app ALB SG: 8080 RDS SG: 5432, 0.0.0.0/0: 443 ECS Fargate タスク
sg-rds ECS SG: 5432 - RDS PostgreSQL

RDS 構成

設定項目 説明
エンジン PostgreSQL 16.x 本番 DB
インスタンスクラス db.t3.medium 初期設定
マルチ AZ 有効 フェイルオーバー対応
自動バックアップ 7 日間保持 日次スナップショット
暗号化 有効(AWS KMS) データの暗号化
パラメータグループ カスタム shared_buffersmax_connections 等の最適化

CI/CD パイプライン

uml diagram

GitHub Actions ワークフロー構成

ワークフロー トリガー 内容
ci.yml PR / push Lint・テスト・ビルド・カバレッジ
cd-staging.yml main push ステージング環境への自動デプロイ
cd-production.yml 手動承認 / release タグ 本番環境へのデプロイ
terraform-plan.yml infra/ 変更の PR terraform plan 結果を PR にコメント
terraform-apply.yml infra/ 変更の main push terraform apply でインフラ更新

デプロイ戦略

戦略 環境 内容
ローリングアップデート ステージング・本番 ECS の minimumHealthyPercent: 50, maximumPercent: 200 でゼロダウンタイムデプロイ
ロールバック 本番 前バージョンの ECR イメージ SHA で ecs update-service を実行
Blue/Green 将来対応 CodeDeploy + ALB の B/G デプロイ(高トラフィック時に検討)

監視・ログ設計

uml diagram

監視項目

監視カテゴリー メトリクス 閾値(例) アクション
アプリケーション HTTP 5xx エラー率 5% 以上 アラート → Slack 通知
アプリケーション レスポンスタイム(P99) 3 秒以上 アラート → Slack 通知
ECS CPU 使用率 80% 以上 Auto Scaling トリガー
ECS メモリ使用率 80% 以上 アラート
RDS DB 接続数 上限の 80% アラート
RDS レプリケーション遅延 60 秒以上 アラート
ALB HealthyHostCount 0 緊急アラート(PagerDuty 等)

ログ設計

ログ種別 出力先 形式 内容
アプリケーションログ CloudWatch Logs /ecs/cargo-tracker JSON リクエスト・ビジネスイベント・エラー
アクセスログ ALB Access Logs → S3 ALB 形式 HTTP アクセス履歴
監査ログ CloudWatch Logs /ecs/cargo-tracker/audit JSON 荷役登録・予約変更等の重要操作
DB 低速クエリログ RDS → CloudWatch Logs PostgreSQL 形式 1 秒以上のクエリ

構造化ログの形式(JSON):

{
  "timestamp": "2026-03-31T10:00:00.000Z",
  "level": "INFO",
  "traceId": "abc123",
  "userId": "user-001",
  "context": "booking",
  "message": "貨物予約を登録しました",
  "bookingId": "BK-2026-0001"
}

環境構成

uml diagram

環境別設定一覧

設定項目 ローカル ステージング 本番
DB Docker PostgreSQL RDS(Single-AZ) RDS(Multi-AZ)
ECS タスク数 - 1 2〜6(Auto Scaling)
ログレベル DEBUG INFO INFO
Spring Profile local staging production
DB マイグレーション 自動(起動時) 自動(起動時) 自動(起動時)
Flyway Clean 許可 禁止 禁止
シークレット管理 .env ファイル AWS Secrets Manager AWS Secrets Manager

Terraform IaC 構成

uml diagram

Terraform の運用方針:

原則 内容
State の S3 管理 terraform.tfstate を S3 バケットで管理。DynamoDB でステートロック
モジュール分割 再利用可能なコンポーネントはモジュール化。ステージング・本番で同一モジュールを使用
機密情報の管理 terraform.tfvars に DB パスワード等を含めない。AWS Secrets Manager または環境変数で管理
Plan レビュー terraform apply 前に必ず terraform plan を実施し、変更内容をレビュー
Drift 検出 定期的に terraform plan を実行し、コードと実環境の乖離を検出する