Skip to content

chore: application.yml に DataSource / Flyway / OAuth2 issuer 設定追加 (N7) #89

Description

@win2cot

背景

webapi/src/main/resources/application.yml を本番運用に必要な設定で整備する。ただし規約上、Spring プロファイル(@Profile / application-{env}.yml / --spring.profiles.active=...)は不使用(コーディング規約 §20.2 / infrastructure-plan §3.4)。環境差は ECS Task Definition の environment / Parameter Store の secrets で注入する。

本 Issue は 2026-05-24 N1〜N8 見直し(関連 Issue: #248 設計規約 §3.1 例外運用、#250 secrets 方針整合)を受け、起票時(2026-05-10 gap analysis §G-6)の旧方針記述(application-{local,staging,prod}.yml 分割 / DB password を Secrets Manager 参照)を全面撤回し、規約整合の最新方針へ書き換えたもの。

規約準拠の前提

規約 / doc 内容
コーディング規約 §20.2 @Profile 禁止(ADR-0008 Native Image AOT 制約による)
infrastructure-plan §3.4 単一 application.yml + ${ENV_VAR} 注入。application-{env}.yml は作らない
infrastructure-plan §3.5 tasks-webapi の RDS 接続は K-A 案 IAM 認証。DB パスワードは Secrets Manager / Parameter Store のいずれにも保存しない(動的取得)
OIDC Issuer URI 機密ではない。環境変数 OIDC_ISSUER_URI で注入
(派生) #250 Secrets Manager は不採用、Parameter Store SecureString のみ使用(Keycloak SMTP password 等の IAM で代替不可な機密に限定)

やること

1. application.yml の最終形を確認(既に実装済の項目)

以下は 2026-05-24 時点で既に実装済。本 Issue では内容を確認のうえ追加変更不要であることを明記:

  • spring.datasource.url: ${DATASOURCE_URL} 注入
  • spring.datasource.username: ${DATASOURCE_USERNAME} 注入
  • spring.datasource.password: ${DATASOURCE_PASSWORD:}(IAM 認証時は空文字)
  • spring.jpa.hibernate.ddl-auto: validate
  • spring.flyway.enabled: true / locations: classpath:db/migration
  • spring.security.oauth2.resourceserver.jwt.issuer-uri: ${OIDC_ISSUER_URI} 注入

2. JSON ロギング(Logback)を追加 — 残実装

webapi/src/main/resources/logback-spring.xml を新規作成し、CloudWatch Logs に投入しやすい JSON 出力を有効化する。

  • ConsoleAppender + LogstashEncoder(net.logstash.logback:logstash-logback-encoder)
  • 既存 application.ymllogging.level 設定は維持(root INFO / xyz.dgz48 DEBUG)
  • 依存追加: webapi/build.gradleruntimeOnly 'net.logstash.logback:logstash-logback-encoder:<latest>'

3. management.endpoints.web.exposure.includeprometheus 追加 — 残実装

ECS health check + メトリクス用に /actuator/prometheus を公開する。

  • application.ymlmanagement.endpoints.web.exposure.includehealth,infohealth,info,prometheus に変更
  • 依存追加: webapi/build.gradleimplementation 'io.micrometer:micrometer-registry-prometheus'

4. .env.local テンプレート整備 — 残実装

.env.local.example(コミット可能な雛形)を repo root に作成。値はダミー / プレースホルダ:

# .env.local.example — copy to .env.local and fill in real values (DO NOT commit .env.local)
DATASOURCE_URL=jdbc:mysql://localhost:3306/tasks?useSSL=false&allowPublicKeyRetrieval=true
DATASOURCE_USERNAME=tasks_webapi
DATASOURCE_PASSWORD=
OIDC_ISSUER_URI=http://localhost:8080/realms/tasks

.gitignore.env.local を追加(.env.local.example は除外しない)。docs/dev/local-setup.md(Setup 1-6 で整備済)から本ファイルへの参照リンクを追記。

やらないこと(明示)

  • application-local.yml / application-staging.yml / application-prod.yml の作成 — コーディング規約 §20.2 違反
  • @Profile アノテーション利用 — 同上
  • --spring.profiles.active=... 起動オプション前提の手順記述 — 同上
  • DB パスワードの Secrets Manager / Parameter Store 保存 — infrastructure-plan §3.5 K-A 案 IAM 認証で password 不要
  • OIDC Issuer URI の Secrets Manager 保存 — 機密でない、environment で十分
  • AWS Secrets Manager の採用 — docs(spec): 設計規約 §5.4 と infrastructure-plan §3.5 の secrets 方針整合(RDS IAM 認証 / Parameter Store) #250 secrets 方針整合により Parameter Store SecureString のみ使用

受け入れ条件

  • ./gradlew :webapi:bootRun で起動(プロファイル指定なし、環境変数のみで動作)
  • Docker Compose ローカル(Setup 1-1 infra(compose): MySQL 8.4 + Keycloak Docker Compose スタック雛形 #213 で整備済の構成)で Keycloak + MySQL に接続し GET /actuator/health 200
  • GET /actuator/prometheus が 200 + Prometheus エクスポート形式で応答
  • ログ出力が JSON 形式で CloudWatch Logs 投入可能な形になっている
  • application-*.yml が存在しない / @Profile を使わない / --spring.profiles.active=... を Docker Compose 起動コマンドに含まない
  • .env.local.example が repo root に存在、.env.local.gitignore 対象
  • Native Image 化(Phase 1 Setup 2 ADR-0008)時に Spring profile 非依存で動作する見通しあり
  • CI green、UT カバレッジ 80%+

参照

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/backendJava / Spring バックエンド実装変更priority/p0Critical / Blocker。本番影響あり、または他作業がブロックされる

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions