Skip to content

About

Terraform configurations and modules for microservices of LinuxClub

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

microservices-terraform

LinuxClub サークルの運営基盤(LC-Cloud)を Terraform で管理するリポジトリです。

何を管理しているか

サービス 管理内容
Authentik メンバーアカウント・グループ・入会フロー・SSO プロバイダ
GitHub Organization・Teams・Branch Protection・CODEOWNERS
Harbor プロジェクト・RBAC・脆弱性スキャンポリシー
LC-Cloud(OpenStack) Organization・クォータ(CPU/Memory/ディスク)
LC-Cloud(k8s) Namespace・ResourceQuota・NetworkPolicy

アプリケーションのデプロイや LC-Cloud インフラ構築自体はこのリポジトリの対象外です。


リポジトリ構成

microservices-terraform/
├── terraform/
│   ├── platform/      # 🔴 管理者のみ(IdP・メンバー・クォータ・GitHub Org)
│   ├── catalog/       # 🟡 権限者が編集、誰でも PR 可(チーム・プロジェクト・請求アカウント)
│   ├── workspaces/    # 🟢 チーム・個人の自由空間(CODEOWNERS に従う)
│   └── modules/       # 🔴 管理者が管理する共通モジュール
├── documents/terraform/  # 設計ドキュメント(下記参照)
└── .github/              # Actions ワークフロー・CODEOWNERS

変更はすべて Pull Request 経由で行い、CODEOWNERS による承認ゲートを通過してから apply します。


設計ドキュメント

# ドキュメント 内容
01 概要 設計原則・ツール選定・管理対象一覧
02 リポジトリ構造 3 層アクセスモデル・CODEOWNERS・State 管理
03 メンバー管理 入会フロー・個人情報取り扱い・GitHub 連携
04 IdP 設定 Authentik Terraform 設定・enrollment flow・SCIM
05 プロジェクトライフサイクル チーム・プロジェクト作成手順
06 CI/CD GitHub Actions plan/apply・GitHub Secrets 認証
07 クォータ LC-Cloud クォータティア定義
08 請求アカウント 個人・チーム請求アカウント・予算管理
09 コスト定義 クレジット単価・CloudKitty 設定
10 ロール・権限 ロール定義・権限マトリクス・GitHub Teams
11 ワークスペース設定 project-config.yaml・Tier 3 の使い方
12 OpenStack リソース Keystone・Nova・Neutron・Cinder 設定
13 運用レイヤー 運用責任分離・エスカレーションフロー
14 Middleware API infra-api / billing-api / k8s-api の設計・Authentik Outpost 認証・GUI からの利用方法
15 ローカル開発 ローカル環境構築・act による CI ローカル実行
16 実装フェーズ フェーズ別構築順序・依存関係
17 本番構築ランブック 本番環境ゼロからの構築手順
18 権限管理(RBAC) Authentik グループ・Keystone ロール・Harbor・K8s RBAC への写像

環境構築

目的に合わせて手順書を参照してください。

目的 手順書
本番環境をゼロから構築する 17-production-runbook.md
ローカル開発環境を立ち上げる 15-local-development.md

クイックスタート

メンバーを追加する

  1. terraform/platform/members/active/<コホート>/members_secrets.yaml.enc に email・student_id・role を追記して SOPS で暗号化
  2. PR を作成 → circle-admin または tech-lead が承認 → apply
  3. メンバーに招待リンクが発行される(7 日間有効)
  4. メンバーが招待リンクから username・display_name・パスワードを設定
  5. Bot が auto-gen-members.yaml を自動更新 → 次回 apply でアカウント確定

詳細は 03-member-management.md を参照してください。

チームを作成する

  1. terraform/catalog/teams/_template/ をコピーして terraform/catalog/teams/<チーム名>/ を作成
  2. PR を作成 → circle-admin または lc-cloud-platform が承認 → apply

詳細は 05-project-lifecycle.md を参照してください。


ローカルで CI を動かす(act)

GitHub Actions ワークフローを手元で実行するには act を使います。

# セットアップ(初回のみ)
cp local/.secrets.example local/.secrets   # 値を入力する
cp local/.act.env.example local/.act.env

# plan ワークフローを実行
act pull_request \
  -W .github/workflows/plan.yml \
  --matrix stack:terraform/catalog/teams/_template

# modules-check を実行
act pull_request -W .github/workflows/modules-check.yml

詳細は 15-local-development.md を参照してください。


使用ツール

用途 ツール
IaC Terraform
シークレット管理 SOPS(age 暗号化)
State バックエンド Ceph RGW(S3 互換)
IdP Authentik(goauthentik/terraform-provider-authentik)
コンテナレジストリ Harbor
CI/CD GitHub Actions
CI ローカル実行 act

ロール

操作権限はロールによって管理されています。

ロール 概要
circle-admin 役員。全操作の最終承認者
tech-lead 技術最高責任者。platform 全体を管理
lc-cloud-infra LC-Cloud インフラ担当。クォータ・IdP を管理
lc-cloud-platform LC-Cloud プラットフォーム担当。GitHub Org・モジュールを管理
team-lead チームリーダー。自チームの catalog エントリを管理
member 一般メンバー。workspaces 内で CODEOWNERS に従い操作可能

詳細は 10-roles-and-permissions.md を参照してください。

About

Terraform configurations and modules for microservices of LinuxClub

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages