Repository navigation
docs: Control Plane アーキテクチャ設計(Terraform + Keycloak) - #32
Conversation
- マルチクラウド対応を優先した技術スタック選定 - IaC: AWS CDK → Terraform(マルチクラウド対応) - 認証: Amazon Cognito → Keycloak(ベンダーロックイン回避) - イベントバス: EventBridge → NATS/Kafka(クラウドアグノスティック) - データベース: PostgreSQL + DynamoDB/Firestore/CosmosDB - アーキテクチャ設計 - Keycloak による OIDC/SAML 認証基盤 - Terraform モジュール構成(keycloak/event-bus/database/kubernetes-base) - テナント管理サービス(TypeScript/Go) - マルチクラウド対応のディレクトリ構造 - 検証手順の定義 - Terraform テスト(Terratest) - Keycloak デプロイメント検証(kind/LocalStack) - 統合テスト(カバレッジ 100%) 参照: Plan.md "Control Plane 基盤構築 (Terraform + Keycloak)" 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
WalkthroughThe pull request adds a comprehensive planning document to Plan.md for Control Plane infrastructure foundation using Terraform and Keycloak. The new section details objectives, background, technology stack, guardrails, tasks, directory structure, validation steps, and progress tracking for multi-cloud deployment. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~8 minutes
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
Plan.md (1)
110-262: Excellent comprehensive planning document—structure and content are well-executed.The new section follows the established template faithfully and provides clear guidance for a multi-cloud Control Plane foundation. Objectives are crisp, guardrails align with project standards, and validation steps are practical and testable. The decision to pivot from AWS CDK to Terraform + Keycloak is well-justified and appropriately documented in the progress log.
Minor suggestions for strengthening the plan:
Task dependency sequencing: Consider adding an implicit ordering note or a DAG comment. For example, "Terraform module design (line 144) must be completed before Keycloak Helm integration (line 145)." Currently, the structure is clear but could benefit from an optional
Dependencies:subsection.Cross-reference to Issue #27: The plan mentions "テナント管理サービスの実装 (TypeScript/Go)" at lines 155–158 but does not explicitly link it to Issue #27, which is already in active development. Consider adding a note like
Related to #27 (Tenant Management Service MVP)to clarify the sequencing and dependencies between the two initiatives.Open Question clarity: The event bus decision (line 246) and local dev environment (line 245) are appropriately flagged as open. Consider adding rough decision timelines (e.g., "Decide by [date]") to prevent these from becoming indefinite blockers.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
Plan.md(1 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
Plan.md
163-163: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: claude-review
| ``` | ||
| infrastructure/ | ||
| └── terraform/ | ||
| ├── modules/ | ||
| │ ├── keycloak/ # Keycloak モジュール | ||
| │ │ ├── main.tf | ||
| │ │ ├── variables.tf | ||
| │ │ ├── outputs.tf | ||
| │ │ └── helm-values.yaml # Keycloak Helm values | ||
| │ ├── event-bus/ # NATS/Kafka モジュール | ||
| │ │ ├── main.tf | ||
| │ │ └── variables.tf | ||
| │ ├── database/ # PostgreSQL モジュール | ||
| │ │ ├── main.tf | ||
| │ │ └── variables.tf | ||
| │ └── kubernetes-base/ # Kubernetes 基盤 | ||
| │ ├── main.tf | ||
| │ └── namespaces.tf | ||
| ├── environments/ | ||
| │ ├── dev/ | ||
| │ │ ├── main.tf | ||
| │ │ ├── variables.tf | ||
| │ │ └── terraform.tfvars | ||
| │ ├── staging/ | ||
| │ └── prod/ | ||
| └── control-plane/ # Control Plane メインディレクトリ | ||
| ├── main.tf | ||
| ├── variables.tf | ||
| ├── outputs.tf | ||
| ├── providers.tf # マルチクラウドプロバイダー | ||
| └── backend.tf | ||
|
|
||
| backend/ | ||
| └── services/ | ||
| └── control-plane/ | ||
| └── tenant-management/ # テナント管理サービス | ||
| ├── src/ | ||
| │ ├── api/ # REST API | ||
| │ ├── keycloak/ # Keycloak クライアント | ||
| │ ├── events/ # イベントパブリッシュ | ||
| │ └── database/ # DB アクセス | ||
| ├── test/ | ||
| ├── Dockerfile | ||
| └── package.json | ||
| ``` |
There was a problem hiding this comment.
Add language identifier to code block to resolve markdown linting issue.
The fenced code block lacks a language specifier. According to markdownlint (MD040), all code blocks should declare their language for proper rendering and syntax highlighting.
-```
+```tree
infrastructure/Alternatively, use text` or bash` if the intent is to emphasize portability across different environments:
-```
+```text
infrastructure/🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
163-163: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In Plan.md around lines 163 to 207, the fenced code block showing the project
tree lacks a language identifier which triggers markdownlint MD040; fix it by
adding a language tag after the opening triple backticks (for example "tree",
"text", or "bash") so the block becomes ```tree (or ```text/```bash) and leave
the contents unchanged to satisfy the linter and enable proper syntax
highlighting.
audit table #6: 旧 UI は 「正解 (+100 pt) 合計スコア: 100 pt」 という事務的 Alert で flag 提出成功を伝えていた (= image #32 「正解時の喜びがない」 指摘)。 競技体験として致命的で、 JAM/GameDay 系競技の「やった!」 という瞬間を完全に殺していた。 修正: - CelebrationOverlay component (= 自前 CSS keyframes confetti、 外部 lib なし) を追加 - 正解時 (= outcome.kind === 'ok') に 3 秒間 confetti animation を全画面 overlay - success Alert を '🎉 正解! +N pt' + 「おめでとうございます」 + 合計スコア strong 強調 に - 既出提出 (= reload 後 flagSubmitted=true 表示) の '提出済み' を '🏆 クリア済み +N pt' + 励まし 文言に差し替え 実装ポリシー: - 外部 lib 不採用 (= supply chain 対策、 confetti は CSS keyframes で自作) - pointer-events: none (= 操作の邪魔をしない) - 60 particles × 1.8-2.8s で 3 秒完結。 動画チラつかない範囲 Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
epic #952 / #956 Phase 1: 直近 audit (image #29 / #32-#36 / #43 / #45 / #50 等) で表面 UX を 1 件ずつ修正してきたが、 画面ごとの IA を体系的に見直して いなかった。 5 persona (Participant / TenantAdmin / TenantOperator / TenantViewer / SystemAdmin) × 12 主要 screen の primary/secondary/non-target を 1 表で正本化する。 新規 docs/ux/persona-screen-matrix.html: - Persona 一覧: 主役の状況 / 典型タスク / 絶対に見せない情報 - Screen × Persona 行列: 12 screen × 5 persona の primary action - 情報のティアリング規約: 一等地 / 中段 / 下段に何を入れるか - エラー / 空状態 UX 規約: FriendlyErrorAlert の 4 要素 + 空状態 = 次の一歩 - Cloudscape 使い方規約: Header / Container / Table-vs-Cards / Button variant - Roadmap: Phase 1 = 本 PR / Phase 2 = primary action 統一 (画面ごとに別 PR) / Phase 3 = FriendlyErrorAlert を全 SPA 展開 / Phase 4 = ADR 化 設計判断: - HTML 直書き (= ADR と同じ理由で表現力 / row span / color を保つ。 feedback_design_docs_html メモリに沿う) - docs/ux/ を新設 (= 既存の docs/operations/ docs/problems/ と並列に) - 機械検査 ルール (= harness) は Phase 4 (= ADR 化) で追加。 本 doc は reference として配布する段階 Relates #956 Phase 1 Relates #952 Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ma + reference (ADR-031) [#1419] (#1647) Brings the problems submodule to main (schema #32 + microservice-migration-battle ec2-latency-injection action #33), so the platform catalog (discoverProblemsDisruptions) carries the action and the cross-account executor's BATTLE_PROBLEMS_DISRUPTIONS env dispatches it. validate-problems (with the merged #1639 validator) passes; infra 2442 pass. Relates #1419 Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
概要
TenkaCloud の Control Plane(管理基盤)のアーキテクチャ設計を Plan.md に追加しました。
マルチクラウド対応とベンダーロックイン回避を優先した技術スタックを選定しています。
背景
技術スタック変更
IaC
認証・認可
イベントバス
データベース
コンテナオーケストレーション
アーキテクチャ設計
ディレクトリ構造
コントロールプレーンの責務
テナント管理
認証・認可
イベント管理
システム管理者機能
検証手順
terraform fmt,terraform validate)未解決の質問
次のステップ
参考
🤖 Generated with Claude Code
Summary by CodeRabbit
Release Notes