1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【プロトタイプ】Legal Event Flow - 法務規約ページ管理システム

1
Posted at

Github

ホームページの法務規約ページ(利用規約、プライバシーポリシー)管理システム。文書変更をトリガーに、イベント駆動で通知・DB更新・静的サイト反映を自動実行するサーバーレスWebアプリ。

Architecture

  • Frontend: React (Vite) + TypeScript + Tailwind CSS → S3 + CloudFront
  • Backend: AWS Lambda (Node.js/TypeScript) × 4関数
  • Event Bus: EventBridge + SQS(疎結合・冪等性保証)
  • DB: Aurora Serverless v2 (PostgreSQL) + DynamoDB
  • IaC: Terraform(全リソース管理)
  • CI/CD: GitHub Actions(OIDC認証)

Diagram

diagram.jpg

Database Design

本システムは性質の異なる2種類のデータを、それぞれ最適なDBに分けて管理しています。

Aurora Serverless v2 (PostgreSQL) — 不変の記録

「一度書いたら変えない」データの永続ストア。

法務ドキュメントは、改ざんできない履歴として保持する必要があります。Aurora はリレーショナルDB の参照整合性(外部キー制約)と SERIAL による自動採番を活かし、ドキュメントの全バージョンを追記のみで管理します。過去バージョンの削除・上書きはアプリケーション層で禁止し、監査ログとしての完全性を保ちます。

テーブル 役割
documents 規約の種類を管理(slug: terms-of-service など)
document_versions Markdown本文・バージョン番号・公開ステータスを保持。追記のみ

DynamoDB — 動的な状態管理

「頻繁に変わる・一時的な」データの高速ストア。

スケジュールや処理フラグは更新頻度が高く、スキーマも柔軟に変えたいデータです。DynamoDB の PAY_PER_REQUEST 課金と TTL 自動削除を活用し、Aurora に一時データを持ち込まない設計にしています。

テーブル 役割
ScheduledUpdates 予約反映の待ちキュー。ApplyAt(UNIX Timestamp)でGSIクエリし、scheduler-handler が毎時チェック
UserSettings ユーザーごとの通知設定。PK: UserId でO(1)アクセス
IdempotencyKeys SQSメッセージの重複処理防止フラグ。TTL 24時間で自動削除
SchemaMigrations Auroraマイグレーションの適用履歴。鶏卵問題を避けるためAurora側には置かない

使い分けの判断基準

変更履歴を残す・整合性が重要  →  Aurora
一時的・高頻度更新・TTL管理   →  DynamoDB

Getting Started

前提条件

  • AWS CLI 設定済み
  • Terraform v1.7+
  • Node.js v20+

初回セットアップ

# 1. Terraform state 用 S3 バケットを手動作成(一度だけ)
aws s3 mb s3://your-tf-state-bucket --region ap-northeast-1

# 2. インフラ構築
cd terraform
terraform init -backend-config="bucket=your-tf-state-bucket"
terraform apply -var="github_repo=your-org/legal-event-flow"

# 3. フロントエンド開発
cd frontend && npm install && npm run dev

環境削除

cd terraform && terraform destroy
# ⚠️  terraform state バケット自体は手動削除が必要
# ⚠️  CloudFront のエッジキャッシュ消去に数十分かかる場合あり

CI/CD

main ブランチへの push で以下が自動実行されます:

terraform apply
  ↓
Lambda デプロイ (4関数)
  ↓
DB マイグレーション (migrate-handler)
  ↓  ← 並列
React ビルド & S3 デプロイ + CloudFront キャッシュ無効化

GitHub Secrets 設定

Secret 説明
AWS_ACCOUNT_ID AWSアカウントID
TF_STATE_BUCKET Terraform state用S3バケット名
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?