LESSON 30分

ストーリー

田中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/CDGitHub 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つを提供

チェックリスト

  • セルフサービスの5段階の成熟度を説明できる
  • カタログアイテムの設計方法を理解した
  • RBAC と承認フローの設計ができる
  • 3つのインターフェースの使い分けを理解した

次のステップへ

次は「API駆動プラットフォーム」を学びます。セルフサービスの基盤となるAPI設計の方法を身につけましょう。


推定読了時間: 30分