データベースドキュメント

このページでは、本システムのデータストレージとマイグレーションについて説明します。

構成概要

本システムは、サーバーレス 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 として使用しています。

  1. DB 変更: liquibase_migrate/changes/ に SQL を追加。
  2. エンティティ生成: マイグレーション実行後、実際の DB スキーマから SeaORM のエンティティクラスを自動生成します。
    • 生成コマンド例: sea-orm-cli generate entity
    • 生成先: inquiry-api/api/sea_orm/src/entity/
  3. ビジネスロジック: 生成されたエンティティを使用して、型安全なクエリを記述します。

権限管理

IAM ロールに基づいた権限管理を行っています。

  • lambda ロールなどが定義されており、Liquibase によって適切な GRANT 処理が行われます。
  • 各環境 (develop/release) ごとに、Lambda 実行ロールに対して DSQL への接続・操作権限が付与されます。

results matching ""

    No results matching ""