Skip to content

infra(terraform): Phase 1 Sprint 2 — RDS parameter group(time_zone=Asia/Tokyo / utf8mb4_unicode_ci、tasks/keycloak 両 DB)(S2Infra-9) #494

Description

@win2cot

背景

Sprint 1 で構築した RDS 2 インスタンス(tasks: infra/modules/rds/main.tf / Keycloak: infra/shared/modules/keycloak_db/main.tf)はいずれも parameter_group_name 未指定で、デフォルト parameter group(default.mysql8.4)が適用されている。

問題

  1. time_zone = UTC(ADR-0009 JST 全層統一の前提崩れ)
    • コーディング規約 §12.1 は「RDS のパラメータグループで time_zone = Asia/Tokyo を設定し、JVM・CI・DB 全てが Asia/Tokyo に揃っていることを前提とする」と明記。
    • JDBC URL は connectionTimeZone=SERVER&forceConnectionTimeZoneToSession=true でサーバ TZ をそのまま採用する設計のため、dev では UTC セッションになる。
    • api/openapi.yaml は「『今日』はサーバ側 Asia/Tokyo で確定」「tenants.created_at は DB に JST で保存される前提」と記述しており、日付判定・保存値がズレる。
    • ローカル(docker-compose.local.yml)は --default-time-zone=Asia/Tokyo 設定済みのため、ローカルと dev で挙動が乖離する(ローカルで通って dev で日付ズレ)。
  2. collation 規約不一致(実害小)
    • MySQL 8.4 のサーバデフォルトは utf8mb4 / utf8mb4_0900_ai_ci。設計規約は全テーブル utf8mb4_unicode_ci 統一を規定。Flyway DDL はテーブル単位で明示済みのため実害は限定的だが、DB レベルデフォルト・暗黙作成テーブル・一時テーブルが規約とズレる。

対応内容

  • infra/modules/rds: aws_db_parameter_group(family mysql8.4)を追加し、aws_db_instance.mainparameter_group_name を設定
    • time_zone = Asia/Tokyo
    • character_set_server = utf8mb4
    • collation_server = utf8mb4_unicode_ci
  • infra/shared/modules/keycloak_db: 同内容の parameter group を追加(命名は platform-${var.env}- 系、ADR-0004 §D 準拠)
  • terraform apply 後、両インスタンスを再起動(parameter group 付け替えの反映には reboot が必要)
  • 反映確認: 両 DB で SELECT @@time_zone, @@character_set_server, @@collation_server;

受入条件

  • 両 RDS でセッションの実効 time_zoneAsia/Tokyo(SELECT NOW() が JST を返す)
  • @@character_set_server = utf8mb4 / @@collation_server = utf8mb4_unicode_ci
  • apply 済みで terraform plan が no-change

注意

  • parameter group 付け替えはインスタンス再起動が必要(dev / db.t4g.micro / single-AZ のため影響軽微)。time_zone 自体は dynamic parameter だが、PG の付け替え反映には reboot を要する。
  • time_zone は新規セッションから有効。既存コネクションプールには効かないため、アプリ側 ECS Task の再起動(またはプール再接続)も合わせて行う。
  • Keycloak は時刻を epoch millis 中心で保持するため timezone 影響は小さいが、運用一貫性(ADR-0009)のため同一設定とする。

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/dbFlyway マイグレーション / スキーマ / DDL 変更area/infraAWS インフラ(ECS Fargate / RDS / Keycloak / IAM)変更priority/p0Critical / Blocker。本番影響あり、または他作業がブロックされるtask-type:implコード実装が主体のタスク

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions