DEV Community

myougaTheAxo
myougaTheAxo

Posted on • Originally published at zenn.dev

Claude CodeでHelmチャートを設計する:values.yaml・External Secrets・staging/prod差分管理

はじめに

Claude CodeでKubernetesのHelmチャートを設計する際、values.yamlの環境差分管理とExternal Secrets Operatorの組み合わせが強力なパターンです。本記事では、ApplicationSetによるvalues.yamlオーバーライド、AWS SSMとの連携、--atomicロールバック、SyncWave順序制御について解説します。

CLAUDE.mdでのHelm運用ルール

## Helmチャート設計
- values.yaml: base + staging/prod オーバーライドで環境差分を管理
- External Secrets Operator: AWS SSM Parameter Store連携、平文シークレット禁止
- デプロイ: helm upgrade --install --atomic(失敗時自動ロールバック)
- ArgoCD: ApplicationSetでstagingとprodを統一管理、SyncWave順序制御
Enter fullscreen mode Exit fullscreen mode

ApplicationSet + values.yaml オーバーライド構成

環境ごとのvalues.yamlを分離し、ApplicationSetで一元管理します。

# applicationset.yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: myapp-appset
spec:
  generators:
    - list:
        elements:
          - env: staging
            replicaCount: "1"
            domain: staging.example.com
          - env: prod
            replicaCount: "3"
            domain: example.com
  template:
    spec:
      source:
        helm:
          valueFiles:
            - values.yaml
            - values-{{env}}.yaml
Enter fullscreen mode Exit fullscreen mode

External Secrets Operator: AWS SSM連携

平文のシークレットをGitにコミットせず、AWS SSMからKubernetes Secretを自動生成します。

# externalsecret.yaml
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: myapp-secrets
spec:
  refreshInterval: 5m
  secretStoreRef:
    name: aws-ssm-store
    kind: ClusterSecretStore
  target:
    name: myapp-secrets
    creationPolicy: Owner
  data:
    - secretKey: DATABASE_URL
      remoteRef:
        key: /myapp/prod/database-url
    - secretKey: API_KEY
      remoteRef:
        key: /myapp/prod/api-key
Enter fullscreen mode Exit fullscreen mode

--atomic ロールバック戦略

デプロイ失敗時に自動ロールバックするため、CI/CDパイプラインでは--atomicフラグを必須とします。

helm upgrade --install myapp ./charts/myapp \
  --namespace myapp-prod \
  --values values.yaml \
  --values values-prod.yaml \
  --atomic \
  --timeout 5m \
  --wait
Enter fullscreen mode Exit fullscreen mode

--atomic--waitを暗黙的に含み、タイムアウト内にPodがReadyにならなければ自動的に前バージョンへロールバックします。

SyncWave 順序制御

ArgoCD SyncWaveを使って、データベースマイグレーションをアプリケーション起動より先に完了させます。

# migration-job.yaml
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "-1"  # アプリより先に実行

# deployment.yaml
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "0"   # マイグレーション完了後に起動
Enter fullscreen mode Exit fullscreen mode

負の値が先に実行されるため、Wave -1でJobs/Migrations、Wave 0でDeployments、Wave 1でIngress/Serviceの順が一般的なパターンです。

まとめ

  • ApplicationSet + values.yaml オーバーライド でstaging/prodの環境差分をDRYに管理
  • External Secrets Operator + AWS SSM で平文シークレットのGitコミットを根絶
  • --atomic フラグ でデプロイ失敗時の自動ロールバックを保証、ダウンタイムリスクを最小化
  • SyncWave 順序制御 でDBマイグレーション→アプリ→Ingressの依存関係を安全に解決

インフラ設計のレビューは **Code Review Pack(¥980)* の /code-review で確認できます。*

prompt-works.jp

Top comments (0)