データベースドキュメント
このページでは、本システムのデータストレージとマイグレーションについて説明します。
構成概要
本システムは、サーバーレス SQL データベースである Amazon Aurora DSQL を使用しています。
- データベース: Amazon Aurora DSQL
- 方言: PostgreSQL 互換
- 接続方式: IAM 認証 (dsql:DbConnect)
テーブル定義
主要なテーブルとして messages テーブルが存在します。
messages テーブル
お問い合わせメッセージを格納するテーブルです。
| カラム名 | 型 | 説明 |
|---|---|---|
id |
UUID | プライマリキー。UUID v7 (アプリケーション生成) または v4 (DB生成)。 |
cognito_id |
UUID | 送信者の Cognito ユーザー ID (sub)。 |
created_at |
TIMESTAMPTZ | 作成日時(タイムゾーン付き)。 |
body |
TEXT | メッセージ本文。 |
row_log |
TEXT | API Gateway からの生のリクエストログ。 |
is_from_user |
BOOLEAN | ユーザーからのメッセージなら true、システム側なら false。 |
マイグレーション (Liquibase)
データベースのスキーマ管理には Liquibase を使用しています。
- ソースパス:
inquiry-api/liquibase_migrate/ - 主要ファイル:
changelog.xml: マイグレーションの全体定義changes/*.sql: 個別の SQL 変更セット
マイグレーションの実行
GitHub Actions (inquiry_db_migrate.yaml) により、以下のタイミングで実行されます。
develop,main,releaseブランチへのプッシュ時db_migrateタグが付与された PR
また、ローカル環境でのテスト時には PostgreSQL コンテナに対して Liquibase を実行し、スキーマの整合性を確認します。
開発フロー (SeaORM)
Rust のバックエンドコードでは、SeaORM を ORM として使用しています。
- DB 変更:
liquibase_migrate/changes/に SQL を追加。 - エンティティ生成: マイグレーション実行後、実際の DB スキーマから SeaORM のエンティティクラスを自動生成します。
- 生成コマンド例:
sea-orm-cli generate entity - 生成先:
inquiry-api/api/sea_orm/src/entity/
- 生成コマンド例:
- ビジネスロジック: 生成されたエンティティを使用して、型安全なクエリを記述します。
権限管理
IAM ロールに基づいた権限管理を行っています。
lambdaロールなどが定義されており、Liquibase によって適切なGRANT処理が行われます。- 各環境 (develop/release) ごとに、Lambda 実行ロールに対して DSQL への接続・操作権限が付与されます。