ストーリー
田
田中VPoE
Step 1で開発者体験の課題を可視化した。最大のペインポイントは「セルフサービス率15%」。つまりインフラ操作の85%がチケット経由だ。ここからはセルフサービスプラットフォームの設計に入る
あなた
セルフサービスとは、開発者がチケットを切らずに自分でインフラを操作できるようにすることですよね
あ
田
田中VPoE
その通り。ただし「開発者にAWSコンソールの管理者権限を渡す」ことではない。適切な抽象化と制約の中で、開発者が自律的に操作できるインターフェースを設計する。「自由」と「統制」のバランスが設計の核心だ
あなた
AWSコンソールを直接触るのではなく、プラットフォームが提供するインターフェースを使うということですか
あ
田
田中VPoE
そうだ。開発者は「PostgreSQLデータベースが欲しい」と思ったとき、RDSの設定を気にする必要はない。「サイズS/M/L」と「サービス名」を指定すれば、セキュリティ設定やバックアップ設定が自動で適用されたデータベースが数分で手に入る
セルフサービスの設計レベル
5段階のセルフサービス成熟度
| レベル | 名称 | 特徴 | 例 |
|---|
| L1 | チケット依存 | すべてインフラチームに依頼 | 「DBを作ってください」チケット |
| L2 | テンプレート提供 | テンプレートを渡して開発者がカスタマイズ | Terraformモジュールを提供 |
| L3 | パラメータ化セルフサービス | パラメータを選択するだけで完了 | Webフォームで「サイズM」を選択 |
| L4 | インテント駆動 | 意図を伝えるだけで自動構成 | 「本番用DBが欲しい」→ 全自動 |
| L5 | インテリジェント | 使用パターンから自動提案・最適化 | 「このサービスにはRedisが有効です」 |
目標レベルの設定
CloudOps社のセルフサービス成熟度計画:
現在: L1(チケット依存)
↓ Phase 1(3ヶ月)
目標1: L3(パラメータ化セルフサービス)
- DB作成、環境構築、サービス立ち上げ
↓ Phase 2(6ヶ月)
目標2: L4(インテント駆動)の一部導入
- サービステンプレートからの全自動構築
↓ Phase 3(12ヶ月)
目標3: L4全面展開 + L5の試験導入
- コスト最適化の自動提案等
セルフサービスカタログの設計
カタログアイテムの定義
| カテゴリ | アイテム | パラメータ | 所要時間目標 |
|---|
| コンピュート | Kubernetesネームスペース | サービス名、チーム名、環境 | 1分 |
| データベース | PostgreSQL | サイズ(S/M/L)、環境、バックアップ | 5分 |
| データベース | Redis | サイズ(S/M/L)、環境、永続化有無 | 3分 |
| メッセージング | SQSキュー | キュー名、DLQ有無 | 1分 |
| ストレージ | S3バケット | バケット名、公開設定、暗号化 | 1分 |
| 監視 | Datadogダッシュボード | サービス名、SLO目標値 | 2分 |
| CI/CD | GitHub Actionsパイプライン | サービス名、言語、テスト種別 | 3分 |
| 新規サービス | マイクロサービス一式 | テンプレート選択、サービス名 | 10分 |
カタログアイテムの設計パターン
# セルフサービスカタログアイテム: PostgreSQL
apiVersion: platform.cloudops.io/v1
kind: CatalogItem
metadata:
name: postgresql-database
category: database
description: "PostgreSQL データベースの作成"
spec:
parameters:
- name: service_name
type: string
required: true
validation: "^[a-z][a-z0-9-]{2,30}$"
description: "サービス名(小文字英数字とハイフン)"
- name: size
type: enum
required: true
options:
- value: small
label: "Small (2 vCPU, 4GB RAM, 50GB)"
cost: "$50/月"
- value: medium
label: "Medium (4 vCPU, 16GB RAM, 200GB)"
cost: "$200/月"
- value: large
label: "Large (8 vCPU, 32GB RAM, 500GB)"
cost: "$500/月"
- name: environment
type: enum
required: true
options: [dev, staging, production]
- name: backup_enabled
type: boolean
default: true
description: "自動バックアップ(productionは強制有効)"
guardrails:
- rule: "production環境ではbackup_enabled=true を強制"
- rule: "暗号化は全環境で自動有効"
- rule: "セキュリティグループは自動設定"
- rule: "VPC内のみアクセス可能"
provisioning:
method: terraform
module: "modules/rds-postgresql"
estimated_time: "5分"
アクセス制御の設計
RBAC(Role-Based Access Control)
| ロール | 権限 | 対象者 |
|---|
| Platform Admin | すべてのカタログアイテムの管理、ポリシー変更 | プラットフォームチーム |
| Team Lead | 自チームのリソース作成・削除、コスト確認 | テックリード |
| Developer | 自チームのリソース作成(制限付き)、設定変更 | 開発者 |
| Viewer | リソースの閲覧のみ | ステークホルダー |
承認フローの設計
承認フロー:
dev環境のリソース:
→ 自動承認(即時プロビジョニング)
staging環境のリソース:
→ 自動承認(即時プロビジョニング)
production環境のリソース:
Smallリソース → Team Leadの承認(Slack通知、30分SLA)
Medium以上 → Team Lead + Platform Adminの承認
Largeリソース → Team Lead + Platform Admin + コスト承認
月間コスト上限超過:
→ Platform Admin + FinOps承認
セルフサービスのインターフェース
3つのインターフェース
| インターフェース | ユースケース | 対象者 |
|---|
| Webポータル | 視覚的な操作、カタログブラウジング | すべての開発者 |
| CLI | スクリプト化、パイプライン統合 | パワーユーザー |
| API | 自動化、外部ツール連携 | プラットフォーム連携 |
# CLI によるセルフサービスの例
$ cloudops create database \
--type postgresql \
--name payment-db \
--size medium \
--env production
Creating PostgreSQL database 'payment-db' (Medium) in production...
✓ Terraform plan generated
✓ Approval requested (Team Lead: @tanaka)
⏳ Waiting for approval...
✓ Approved by @tanaka (2m 15s)
✓ Provisioning...
✓ Database created!
Connection details:
Host: payment-db.internal.cloudops.io
Port: 5432
Database: payment_db
Secret: vault:secret/data/payment-db/credentials
Total time: 4m 32s
「セルフサービスの目標は『チケットゼロ』ではなく『不要なチケットゼロ』だ。本当に人間の判断が必要なものはチケットで良い」 — 田中VPoE
まとめ
| ポイント | 内容 |
|---|
| セルフサービス成熟度 | L1(チケット依存)からL5(インテリジェント)の5段階 |
| カタログ設計 | パラメータ化されたカタログアイテムでリソースを定義 |
| アクセス制御 | RBAC + 環境ごとの承認フローで安全性を確保 |
| インターフェース | Webポータル、CLI、APIの3つを提供 |
チェックリスト
次のステップへ
次は「API駆動プラットフォーム」を学びます。セルフサービスの基盤となるAPI設計の方法を身につけましょう。
推定読了時間: 30分