世界に一つだけのサーバー
「検証環境では動いたのに、本番環境で動かない」。
それは当然です。あなたの本番サーバーは、長年のつぎはぎ改修によって、
世界中のどこにも同じものが存在しない「雪の結晶(Snowflake)」になっているのですから。
- SSHでサーバーに入り、直接設定ファイルを書き換えることがある
- サーバー構築手順書の最後が「2021年更新」で止まっている
- 本番環境と検証環境のPHPのバージョンが微妙に違う
- サーバーがクラッシュしたら、同じものをゼロから作る自信がない
工業製品のように量産(オートスケール)も交換(リプレース)もできません。
01. 手作りのぬくもりはいらない
(Unique, Fragile, Unreproducible)
エンジニアがSSHでサーバーに入り、`yum update` を叩き、`php.ini` を微調整する。
これを繰り返していくと、サーバーの状態は初期構築時から乖離(ドリフト)していきます。
ある日、サーバーが故障して新しいサーバーを作った時、アプリは動きません。
「3年前に入れたあのパッチ」や「誰かが手動で作ったあのディレクトリ」が足りないからです。
手作りのサーバーは、壊れたら二度と直せないのです。
「ペット」ではなく
「家畜」として扱え。
02. コードでインフラを作る
解決策は「Infrastructure as Code (IaC)」です。
TerraformやAnsible、Dockerなどを使い、サーバーの設定をすべてコードで記述します。
コードがあれば、ボタン一つで全く同じサーバーを何台でも複製できます。
設定変更が必要なら、SSHで入るのではなく、コードを書き換えて適用(Apply)します。
これにより、本番環境と検証環境のズレ(ドリフト)は永遠になくなります。
03. 触ったら負け
究極の目標は「イミュータブル(不変)インフラ」です。
一度作ったサーバーは変更せず、変更が必要なら新しいサーバーを作って入れ替える。
「SSH接続を禁止する」というルールが、最も効果的な安定運用の鍵となります。
人間が触れないサーバーこそが、最も信頼できるサーバーなのです。