Mistake #42 : Configuration Drift

世界に一つだけのサーバー

「検証環境では動いたのに、本番環境で動かない」。
それは当然です。あなたの本番サーバーは、長年のつぎはぎ改修によって、
世界中のどこにも同じものが存在しない「雪の結晶(Snowflake)」になっているのですから。

❄️ 芸術作品度診断
  • SSHでサーバーに入り、直接設定ファイルを書き換えることがある
  • サーバー構築手順書の最後が「2021年更新」で止まっている
  • 本番環境と検証環境のPHPのバージョンが微妙に違う
  • サーバーがクラッシュしたら、同じものをゼロから作る自信がない
⚠️ 警告:あなたのインフラは「一点モノ」の工芸品です。
工業製品のように量産(オートスケール)も交換(リプレース)もできません。

01. 手作りのぬくもりはいらない

❄️
Server-Prod-01
(Unique, Fragile, Unreproducible)

エンジニアがSSHでサーバーに入り、`yum update` を叩き、`php.ini` を微調整する。
これを繰り返していくと、サーバーの状態は初期構築時から乖離(ドリフト)していきます。
ある日、サーバーが故障して新しいサーバーを作った時、アプリは動きません。
「3年前に入れたあのパッチ」や「誰かが手動で作ったあのディレクトリ」が足りないからです。
手作りのサーバーは、壊れたら二度と直せないのです。

サーバーは
「ペット」ではなく
「家畜」として扱え。

02. コードでインフラを作る

解決策は「Infrastructure as Code (IaC)」です。
TerraformやAnsible、Dockerなどを使い、サーバーの設定をすべてコードで記述します。
コードがあれば、ボタン一つで全く同じサーバーを何台でも複製できます。
設定変更が必要なら、SSHで入るのではなく、コードを書き換えて適用(Apply)します。
これにより、本番環境と検証環境のズレ(ドリフト)は永遠になくなります。

03. 触ったら負け

究極の目標は「イミュータブル(不変)インフラ」です。
一度作ったサーバーは変更せず、変更が必要なら新しいサーバーを作って入れ替える。
「SSH接続を禁止する」というルールが、最も効果的な安定運用の鍵となります。
人間が触れないサーバーこそが、最も信頼できるサーバーなのです。

執筆:Infrastructure as Codeチーム

インフラ構築を自動化し、手作業を全廃するエンジニアリング集団。
Terraform / Kubernetes を駆使し、どこでも再現可能なシステム基盤を提供する。