コンフィギュレーションバージョン管理
1)なぜバージョン設定を行うのか
設定は実行可能なポリシーです。ルーティング、制限、フィーチャーフラグ、アクセス、データスキーマを定義します。バージョン管理により、変更が繰り返し可能で、可逆的で可逆的になります。MTTRと変更失敗率を低減し「、売上の魔法」を排除し、セキュリティとコンプライアンスの監査を行います。
2)構成タクソノミ
インフラストラクチャ(IaC):クラスタ、ネットワーク、LB、 DB、キュー。
サービス:アプリケーションパラメータ、リソース、制限、タイムアウト、リトレイ。
製品/ビジネスロジック:関税、AB実験、コンテンツルール。
Data/DataOps:契約スキーム、SLAの鮮度、変換。
セキュリティ:アクセスポリシー、ロール、キー/証明書(秘密自体はリポジトリの外にあります)。
観測性:SLI/SLO、アラート、ダッシュボード。
ルール:システムの動作に影響を与えるものはすべて構成であり、バージョン管理下にある必要があります。
3)バージョン管理の原則
1.GitOps:真実の唯一のソースはリポジトリです。PRおよび自動パイプラインによる変更。
2.宣言:ステップスクリプトではなく、ターゲット状態の説明。
3.アーティファクトの不変性:config→明確に実体化されたスナップショット。
4.スキーマと検証:JSON/YAMLスキーマ、厳格な型キャスティング、必須フィールド。
5.コードのような環境:'env'-フォルダ/オーバーレイ(dev/stage/prod)、違いは最小限で明白です。
6.Idempotenceとrollbacks:任意の構成リリースを元に戻す/ロールバックします。
7.監査とトレーサビリティ:著者、理由、チケット/RFC、署名の変更。
4)バージョン戦略
SemVer for config packets ('MAJOR。マイナー。PATCH'):- MAJOR-互換性のないスキーマ/ポリシーの変更。
- MINOR-新しいフィールド/ルール、下位互換性。
- PATCH-スキームを変更せずに値を修正します。
- タグリリースとリリースノート:変更されたもの、ロールバック方法、チェックポイント。
- ピン留め/ロックファイル:依存関係バージョン(モジュール、グラフ)を修正します。
- 行列バージョン:XアプリケーションのアーティファクトはY config(サービスカタログの行列)と互換性があります。
5)リポジトリ組織
config-repo/
policies/ # общие политики (RBAC, SLO, алерты)
services/
checkout/
schema/ # JSON/YAML схемы конфигов base/ # дефолтные значения overlays/
dev/
stage/
prod/
data-contracts/ # схемы данных, SLA свежести releases/ # теги, changelog, артефакты валидации tools/ # линтеры, генераторы, тесты
ブランチ:トランクベース(メイン)+ショートフィーチャーブランチ。マージ-PR経由でのみ必須のCIを使用します。
6)検証とテスト
スキーマ:各変更はスキーマ検証(必須、列挙、範囲)を渡します。
静的リンタ:書式、キー、重複、禁止フィールド。
互換性テスト:サンドボックスでconfig+service/chartのバージョンが上がります。
テスト実行:dry-runアプリケーション、「what-if」 diff target state。
ポリシー-コードとして:入場ルール(Rego/CEL)-誰が何を変更することができます。
7)巻き戻しとロールバック構成
進歩的な配達:SLO gardrailsとのカナリア1%→5%→25%。
デプロイゲート:アクティブなSEV-1がなく、アラートが緑色で、署名が有効で、ロールバックが準備できています。
ロールバック:'タグvXを元に戻す。Y。Z'または前のスナップショットに切り替える。rollbackコマンドはrunbookに文書化されています。
リリースアノテーション:コンフィグバージョンはメトリック/ログで公開され、インシデントとすばやく相関します。
8)動的およびリモート構成
リモートコンフィグ/フィーチャーフラグ:再起動せずにパラメータを変更します。すべてのフラグもGitOpsの下にあります。
境界:どのパラメータを動的に変更することができます(ホワイトリストのリスト)。
キャッシュと整合性:TTL、バージョン、原子集合置換(2相パブリッシング)。
安全な手すり:ランタイムの変更のための制限と範囲、SLOを離れるときの自動ロールバック。
9)秘密と機密データ
レポで秘密を守らないでください。構成-リンク/プレースホルダのみ。
必要に応じて、構成ファイルの暗号化:シークレット/キーマネージャとの統合。
ローテーションとJIT:アクセスは、運用期間中に発行されます。行動の痕跡は不変です。
フィールドマスキング:検証により、PII/シークレットが設定に入ることを禁止します。
10)環境管理
ベース+オーバーレイ:dev/stage/prodの違いは最小限で透明です。
アーティファクトのプロモーション:ステージを通過した同じスナップショットがprodでプロモートされます。
時間ウィンドウ:コンフィギュレーションの変更は、デューティの変更時には発生しません。リスクハイ-RFCとメンテナンスウィンドウ。
11)漂流の検出および除去
コントローラはターゲットの状態を実際の状態と比較し、差分を報告します。
ドリフトアラート:重要な不一致のためのページのみ;他はチケットです。
自動修復:解像度で-ターゲット状態に戻ります。
監査マニュアル編集:任意の「kubectl edit/ssh」→プロセスインシデントとCAPA。
12)構成カタログおよび所有権
サービスカタログ:所有者、SLO、関連ポリシー、スキーマ、バージョン、互換性。
RACI:誰が提供し、誰がレビューし、誰が承認します。高リスクのためのCAB。
透明性:各エントリにはバージョン履歴とPR/チケット/AARへのリンクがあります。
13)成熟度の指標
適用範囲:GitOpsのサービス/ポリシーの%(目標≥ 95%)。
リードタイム設定の変更:PRからprodへの中央値。
Change failure rate:ロールバック/インシデントの設定リリースの割合。
ドリフト率:不一致の数/週と排除の時間。
ロールバック時間:前のバージョンへの回復の中央値。
監査の完全性:完全な証拠(バリデータ、ドライラン、レビュー)による変更の割合。
14)チェックリスト
設定を変更する前に
- チケット/RFCと変更所有者があります。
- スキームとリンタが検証されました。
- runbookにはロールバック計画とコマンドがあります。
- ゲート:緑色のテスト、有効な署名、アクティブなSEV-1はありません。
- ハイリスクの場合、メンテナンスウィンドウが割り当てられます。
くつろぎの間に
- カナリアとSLO-gardrailsが活動している。
- リリースアノテーションを公開しました。
- チャンネルへのエコーメッセージがあります。MWルールによってアラートノイズが抑制されます。
後で
- 観察ウィンドウを通過し、SLO緑色。
- トータルとエビデンス(チャートの前後、ドライランレポート)がチケットに添付されます。
- 必要に応じて回路図/ドキュメントを更新しました。
15)ミニテンプレート
15.1構成図(YAMLスキーマ、フラグメント)
yaml type: object required: [service, timeouts, retries]
properties:
service: { type: string, pattern: "^[a-z0-9-]+$" }
timeouts:
type: object properties:
connect_ms: { type: integer, minimum: 50, maximum: 5000 }
request_ms: { type: integer, minimum: 100, maximum: 20000 }
retries:
type: object properties:
attempts: { type: integer, minimum: 0, maximum: 10 }
backoff_ms: { type: integer, minimum: 0, maximum: 5000 }
15.2基本設定+オーバーレイプロッド
yaml services/checkout/base/config.yaml service: checkout timeouts: { connect_ms: 200, request_ms: 1500 }
retries: { attempts: 2, backoff_ms: 200 }
limits: { rps: 500 }
features:
degrade_search: false psp_a_weight: 80 psp_b_weight: 20
yaml services/checkout/overlays/prod/config.yaml limits: { rps: 1200 }
features:
psp_a_weight: 70 psp_b_weight: 30
15.3入場ポリシー(アイデア)
yaml allow_change_when:
tests: passed schema_validation: passed active_incidents: none_of [SEV-0, SEV-1]
rollback_plan: present signed_by: ["owner:team-checkout","platform-sre"]
15.4コンフィグリリースカード
Release: checkout-config v2.3.1
Scope: prod EU
Changes: psp_b_weight 20→30, request_ms 1500→1300
Risk: Medium (маршрутизация платежей)
Canary: 1%→5%→25% (30/30/30 мин), guardrails: success_ratio, p95
Rollback: tag v2.3.0
16)アンチパターン
prodの過去のGitOps(「すばやくねじれた」)で編集します。
configリポジトリ内のSecrets/PII。
図と静的チェックの欠如。
環境の強い発散(base≠prod)。
バージョンと履歴のない「Live」機能フラグ。
サーバーのドリフトと手動編集を無視します。
リリースノートとロールバックプランのないタグ。
17)導入ロードマップ(4〜6週間)
1.ネッド。1:構成のインベントリ;別のカタログ、トップ10サービスのスキーム。
2.ネッド。2: CIにlinters/validationとdry-runを含める。グリーンチェックなしでマージを禁止します。
3.ネッド。3: GitOps roll+canaries;テレメトリーのバージョン注釈。
4.ネッド。4-ポリシーアズコードとロールバックパターンを入力します。ドリフトするように警告します。
5.ネッド。5-6:サービスの90%をカバーします。オーバーレイにenvの違いを減らします。成熟度指標を追加し、設定変更の毎週のレビューを追加します。
18)ボトムライン
構成バージョン管理はGitだけでなくシステムです。回路図と検証、GitOpsとアクセスポリシー、カナリアとロールバック、ドリフト検出と完全監査により、configはマネージドアーティファクトに変わります。その結果、迅速かつ安全な変更、SLOの予測可能性、および各リリースに対するチームの信頼性が得られます。