mcpField
D
devops-excellence

devops-excellence

github.com/majiayu000クラウド・DevOps288111 回インストール今日更新
リポジトリ

devops-excellence について

devops-excellenceは、安全なソフトウェアデリバリーとインフラ運用を計画するチーム向けのDevOpsスキルです。CI/CD、GitOps、IaCに加え、コンテナとKubernetesの実践を扱います。

主な機能

  1. 01GitOpsとIaC
  2. 02プログレッシブデリバリーとリリース方式
  3. 03CI/CDのセキュリティとパイプライン最適化
  4. 04Dockerイメージとコンテナの強化
  5. 05Kubernetesのリソースとセキュリティ対策
  6. 06オブザーバビリティとポリシーのコード化

活用シーン

  1. 01短期認証情報を使ったCI/CDパイプラインの設計
  2. 02カナリアまたはブルーグリーンデプロイの選択
  3. 03実行用Dockerイメージの強化
  4. 04Kubernetesのヘルスチェックとリソース管理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/majiayu000/spellbook --skill devops-excellence

インストール後、Claude Code で/devops-excellenceを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

reference/
cicd.md
containers.md
extended.md
release-strategies.md
templates/
Dockerfile
github-actions.yaml

詳細

DevOps の卓越性

コア原則

  • シフトレフト — SDLC の早い段階でセキュリティと品質に対処します
  • GitOps — インフラストラクチャとデプロイの信頼できる唯一の情報源として Git を使用します
  • Infrastructure as Code — すべてのインフラストラクチャをバージョン管理し、再現可能にします
  • プログレッシブデリバリー — フィーチャーフラグとカナリアリリースを使って段階的にロールアウトします
  • イミュータブルインフラストラクチャ — 実行中のシステムを変更せず、置き換えます
  • オブザーバビリティファースト — デプロイや機能に関連するメトリクスを監視します
  • Policy as Code — コンプライアンスとセキュリティを自動的に適用します
  • プラットフォームエンジニアリング — ゴールデンパスとセルフサービスポータルを構築します

厳守事項(必ず従うこと)

これらのルールは必須です。違反した場合、このスキルは正しく機能していません。

静的認証情報の禁止

有効期間の長い静的認証情報は決して使用しないでください。必ず OIDC または短命トークンを使用してください。

# ❌ FORBIDDEN: Static AWS credentials
env:
  AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
  AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

# ✅ REQUIRED: OIDC-based authentication
- name: Configure AWS Credentials
  uses: aws-actions/configure-aws-credentials@v4
  with:
    role-to-assume: arn:aws:iam::123456789012:role/GitHubActions
    aws-region: us-east-1
    # No long-lived secrets - uses GitHub OIDC provider
root コンテナの禁止

コンテナを root として実行してはいけません。必ず root 以外のユーザーを指定してください。

# ❌ FORBIDDEN: Running as root (default)
FROM node:20
WORKDIR /app
CMD ["node", "server.js"]

# ❌ FORBIDDEN: Explicit root user
USER root

# ✅ REQUIRED: Non-root user with UID > 1000
FROM node:20-alpine
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nodejs -u 1001
USER nodejs
WORKDIR /app
CMD ["node", "server.js"]
イメージへのシークレットの埋め込み禁止

Docker イメージにシークレットを決して埋め込まないでください。実行時の注入またはシークレットマネージャーを使用してください。

# ❌ FORBIDDEN: Secrets in build args or ENV
ARG DATABASE_PASSWORD
ENV API_KEY=sk-xxx

# ❌ FORBIDDEN: Copying secret files
COPY .env /app/.env
COPY credentials.json /app/

# ✅ REQUIRED: Mount secrets at runtime
# docker run -v /secrets:/app/secrets:ro myapp
# Or use Kubernetes secrets/configmaps
本番環境へのデプロイを保護する

本番環境へのデプロイには承認を必須とし、main ブランチに制限する必要があります。

# ❌ FORBIDDEN: Direct production deploy without protection
deploy:
  runs-on: ubuntu-latest
  steps:
    - run: deploy-to-prod.sh

# ✅ REQUIRED: Environment protection
deploy:
  runs-on: ubuntu-latest
  environment:
    name: production
    url: https://myapp.com
  # Requires: approval + main branch only

クイックリファレンス

使い分け
シナリオツール/パターン理由
公開 GitHub プロジェクトGitHub Actionsネイティブ統合、公開リポジトリでは無料
エンタープライズ GitLabGitLab CI統合プラットフォーム、高度なセキュリティスキャン
マルチクラウド IaCTerraform成熟したエコシステム、幅広いプロバイダーをサポート
開発者中心の IaCPulumi実際のプログラミング言語を使用でき、テストも容易
Kubernetes のデプロイArgoCD + KustomizeGitOps の標準、宣言型の設定
ダウンタイムのないリリースBlue-Green または Canary即時ロールバックが可能
機能の段階的なロールアウトフィーチャーフラグ(LaunchDarkly)ターゲティングによるプログレッシブデリバリー
デプロイ戦略の選択
戦略ダウンタイムコストロールバック速度複雑さ最適な用途
ローリング最小限低中低定期的な更新、コスト重視
Blue-Greenなし高(2 倍)即時中重要なシステム、容易なロールバック
Canaryなし中高速高リスク軽減、データ主導
再作成大低該当なし非常に低重要でない環境、開発/テストのみ

CI/CD パイプラインのベストプラクティス

パイプラインのセキュリティ
# Short-lived credentials (not static keys)
- name: Configure AWS Credentials
  uses: aws-actions/configure-aws-credentials@v4
  with:
    role-to-assume: arn:aws:iam::123456789012:role/GitHubActions
    aws-region: us-east-1
    # OIDC provider - no long-lived secrets!

# Protected environments for production
environment:
  name: production
  # Requires approval + restricts to main branch
速度の最適化
  • 10 分ビルドルール — ほとんどのプロジェクトでは、ビルドを 10 分未満で完了させます
  • 並列ジョブ — テスト、Lint、セキュリティスキャンを並行して実行します
  • 依存関係のキャッシュ — node_modules、.m2、pip パッケージをキャッシュします
  • 条件付き実行 — ファイルに変更がない場合はジョブをスキップします
# Example: conditional job execution
jobs:
  backend-tests:
    if: contains(github.event.head_commit.modified, 'backend/')
    runs-on: ubuntu-latest
テストピラミッド
              /\
             /E2E\        <- Few (slow, expensive)
            /------\
           /Integration\ <- Some (medium speed)
          /------------\
         /  Unit Tests  \ <- Many (fast, cheap)
        /----------------\
  • 70% 単体テスト(高速、分離)
  • 20% 統合テスト(サービス間の連携)
  • 10% E2E テスト(ユーザーのワークフロー全体)
セキュリティスキャンの統合
# Multi-layer security scanning
jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      # SAST - Static code analysis
      - uses: github/codeql-action/init@v3

      # SCA - Dependency vulnerabilities
      - name: Run Trivy
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          format: 'sarif'

      # Secret scanning
      - name: Gitleaks
        uses: gitleaks/gitleaks-action@v2

      # Container scanning
      - name: Scan Docker image
        run: trivy image myapp:${{ github.sha }}

Docker のベストプラクティス

マルチステージビルド
# Build stage - includes build tools (900MB+)
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

# Runtime stage - minimal image (<100MB)
FROM node:20-alpine AS runtime
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nodejs -u 1001
WORKDIR /app
COPY --from=builder --chown=nodejs:nodejs /app/node_modules ./node_modules
COPY --chown=nodejs:nodejs . .
USER nodejs
EXPOSE 3000
CMD ["node", "server.js"]
セキュリティ強化
  • root 以外のユーザー — 必ず root 以外(UID 1001)として実行します
  • 最小限のベースイメージ — alpine、distroless、または scratch を使用します
  • 読み取り専用ファイルシステム — docker run --read-only
  • レイヤーへのシークレットの埋め込み禁止 — ビルドシークレットまたは外部のボールトを使用します
  • リソース制限 — DoS を防ぐために CPU/メモリ制限を設定します
  • 署名済みイメージ — Docker Content Trust を有効にします
# Security best practices example
FROM gcr.io/distroless/nodejs20-debian12
COPY --chown=65532:65532 /app /app
USER 65532
EXPOSE 8080
.dockerignore
# Version control
.git
.gitignore

# Dependencies (install fresh in container)
node_modules
vendor/
*.pyc
__pycache__

# Secrets and configs
.env
.env.local
secrets/
*.key
*.pem

# Development files
README.md
Dockerfile
docker-compose.yml
.vscode/
.idea/

# Testing and CI
tests/
*.test.js
.github/

Kubernetes のデプロイパターン

リソース管理(適正化)
# 99.94% of clusters are over-provisioned!
# Average CPU usage: 10%, Memory: 23%
resources:
  requests:
    memory: "128Mi"  # Guaranteed allocation
    cpu: "100m"      # 0.1 CPU cores
  limits:
    memory: "256Mi"  # Maximum allowed
    cpu: "200m"      # Hard cap

# Use tools: Kubecost, Goldilocks, VPA
ヘルスチェック
# Liveness: Is container alive?
livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 5
  failureThreshold: 3

# Readiness: Can it receive traffic?
readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5
  successThreshold: 1

# Startup: Has initialization completed?
startupProbe:
  httpGet:
    path: /startup
    port: 8080
  failureThreshold: 30  # 30*10s = 5min for slow starts
  periodSeconds: 10
ConfigMaps とシークレット
# Group related resources in single manifest
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_ENV: production
  LOG_LEVEL: info
---
apiVersion: v1
kind: Secret
metadata:
  name: app-secrets
type: Opaque
stringData:
  DATABASE_URL: postgresql://user:pass@db:5432/mydb
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  template:
    spec:
      containers:
      - name: app
        envFrom:
        - configMapRef:
            name: app-config
        - secretRef:
            name: app-secrets
セキュリティのベストプラクティス
# Pod Security Standards
securityContext:
  runAsNonRoot: true
  runAsUser: 1000
  fsGroup: 1000
  seccompProfile:
    type: RuntimeDefault
  capabilities:
    drop:
    - ALL

# Network Policies (deny-by-default)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
spec:
  podSelector: {}
  policyTypes:
  - Ingress

拡張リファレンス

## Infrastructure as Code (Terraform/Pulumi) から始まる詳細な内容は、このスキルを簡潔に保つため、reference/extended.md に移動しました。移動した例、コマンド一覧、チェックリスト、プラットフォームの詳細、実装テンプレートが必要なタスクでは、このリファレンスを読み込んでください。

コメント