インフラ設定をGitで管理していない会社が必ず経験すること

インフラ初級
GitGitHubIaCインフラ管理障害対応

深夜2時、誰も「何を変えたか」知らない

本番サーバーが落ちた。アラートが鳴る。チームのSlackが騒ぎ始める。

最初の質問は決まってこれだ。「最後に何か変えた人いる?」

Aさんは「昨日nginxの設定を少し触った気がする」と言う。Bさんは「今日の午前中にファイアウォールのルールを追加した」と言う。Cさんは「自分は何もしていない」と言う。

どれが原因か、誰にもわからない。設定ファイルを直接サーバーで開いて見比べる。バックアップがあれば良い方で、ないこともある。

この状況に一度でも陥ったことがある人は多いはずだ。


Cloudflareでさえ「設定変更の差分ミス」で落ちた

2022年6月21日、世界最大のCDN企業であるCloudflareが大規模な障害を起こした。

原因はBGPルーティングポリシーの設定変更。コードにするとこういう差分だった。

[edit policy-options policy-statement AGGREGATES-OUT]
term 6-DISABLED_PREFIXES { ... }
!    term 6-ADV-TRAFFIC-PREDICTOR { ... }
!    term 4-ADV-TRAFFIC-PREDICTOR { ... }
!    term ADV-FREE { ... }
...

一見、ほかの設定変更と同じに見える。しかしこのtermの並び順に問題があり、本来広告されるべきIPプレフィックスが「取り下げ」られた。

結果: 19拠点が同時にオフライン。全グローバルトラフィックの50%が消えた。

Cloudflareはこのとき、変更申請チケットの作成・ドライランの実施・複数エンジニアによるピアレビューを実施していた。それでも起きた。

さらに深刻だったのが復旧作業だ。Cloudflareの事後報告にはこう書かれている。

“network engineers walked over each other’s changes, reverting the previous reverts, causing the problem to re-appear sporadically.”

(ネットワークエンジニアたちが互いの変更を上書きし合い、以前のリバートをさらにリバートしてしまったため、問題が断続的に再発した)

設定変更を「誰が今何を触っているか」を把握する仕組みがなければ、復旧中に別のエンジニアが同じ設定を逆方向に戻してしまう。Cloudflareほどの組織でも、この問題から逃げられない。

障害発生から完全復旧まで: 1時間15分


Gitがあれば何が変わるのか

Gitはバージョン管理システムだ。ファイルの変更履歴を「誰が・いつ・なぜ変えたか」とともに記録し続ける。

インフラ設定にGitを使うと、具体的に何が変わるか。

1. 変更履歴が永続的に残る

git log --oneline nginx.conf
a3f2b1c  2026-06-25 yamada  本番DBへの接続タイムアウトを30sに延長
d891e4f  2026-06-20 tanaka  SSLの証明書更新に伴いssl_certificate_keyのパスを修正
7c3a091  2026-06-15 suzuki  gzip圧縮を有効化

「最後に何を変えたか」を聞き回る必要がなくなる。

2. 差分が一目でわかる

git diff HEAD~1 nginx.conf
- keepalive_timeout  65;
+ keepalive_timeout  120;

バックアップファイルを手動で比較する作業がなくなる。Cloudflareの障害も、差分の目視確認でtermの並び順の問題に気づくのが難しかったことが一因だった。

3. 以前の状態に戻せる

git revert a3f2b1c

タイムアウト設定を変更する前の状態に、コマンド1行で戻せる。「どのファイルをどこに戻せばいいかわからない」という状況がなくなる。

4. 変更を本番適用前にレビューできる

GitHubのPull Request機能を使えば、設定変更を本番に適用する前にチームメンバーが確認できる。Cloudflareがやっていた「ピアレビュー」をより確実な形で実施できる。


よくある反論

「設定ファイルは数個しかない。管理するほどでもない」

1個でも変更履歴が消えた瞬間に障害の原因調査が詰まる。量の問題ではない。

「Gitは開発者のツールで、インフラ担当には難しい」

基本的な使い方(add・commit・log・diff)は30分で覚えられる。難しいのはブランチ戦略や高度なマージ操作で、それは最初は不要だ。

「本番サーバーに直接入って直すことが多い。Gitでは対応しきれない」

緊急時は直接変更して問題ない。ただし変更後に git add して git commit -m "緊急: ポート8080を一時開放" とコメントを残す習慣をつけるだけで十分だ。


どこから始めるか

全部を一度にGit管理する必要はない。まず1ファイルから。

優先度 対象ファイル
nginx.conf / httpd.conf
firewall ルール(ufw / iptables)
/etc/hosts
crontab
.htaccess

ローカルのMacで git init → ファイルをコピーして git addgit commit するだけで始まる。GitHubへのpushはその後でいい。


まとめ

設定管理にGitを使わない理由として「面倒」「必要ない」という声をよく聞く。しかし実際に障害が起きたとき、最初にほしいのは「いつ・誰が・何を変えたか」の記録だ。

Cloudflareほどの組織が、設定変更の差分ミスと復旧時の上書き問題で1時間以上サービスを止めた。規模が小さい組織が同じ問題を抱えても、復旧にかかる時間は長くなる傾向がある。専任のインフラチームがいないからだ。

変更履歴は、つけ始めた瞬間から価値が生まれる。

記事一覧に戻る