Immutable Infrastructure — 直さずに、丸ごと取り替える
動いているサーバーに、パッチを当てたり設定を書き換えたりして直しながら使い続ける。昔ながらのこのやり方は、長く続けるほどサーバーごとに中身が少しずつずれていくという問題を抱えています。
Immutable Infrastructure(イミュータブルインフラ)は、「動いているサーバーは一切いじらない」と決めるやり方です。変えたいときは、新しい中身で丸ごと作り直して、入れ替える。車でいえば、走りながら修理するのではなく新車に乗り換える運用です。図1で2つのやり方を切り替え、同じ出来事を起こしてみてください。
直し続けたサーバーは「一点もの」になる
「直しながら使う」で出来事を起こすと、3台の帯の並びがだんだん食い違っていきます。パッチが1台だけ途中で失敗したり、緊急対応で1台だけ設定を直したりするからです。こうして誰にも正確に再現できなくなったサーバーを、雪の結晶にたとえてスノーフレークサーバーと呼びます。
一番困るのは「1台が壊れた」ときです。作り直そうにも、手元にあるのは最初に構築したときの手順書だけ。その後に積み重ねた変更は記録に残っていないので、新しい1台だけ中身が違うことになります。「前のサーバーでは動いていたのに」という障害は、たいていここから生まれます。
変更は工場で焼き込み、現場では取り替えるだけ
「丸ごと取り替える」では、変更は必ずイメージ工場で行います。パッチを当てたOSやアプリを1つのイメージ(マシンイメージやコンテナイメージ)に焼き込み、そのイメージから新しいサーバーを作って、古いものと入れ替えます。動いているサーバーにはログインすらしません。
だから3台はいつも同じイメージから生まれた、同じ中身です。壊れた1台を作り直しても、同じイメージから作るのでまったく同じになります。問題が出たら、1つ前のイメージで作り直せば元どおり。「元に戻す手順」を考える必要がありません。
その代わり、どんな小さな変更でもイメージを作り直して入れ替える手間がかかります。これを現実的にしてくれるのが、IaCやCI/CDによる自動化と、コンテナのように数秒で作れる軽い入れ物です。
- Mutable
- 「変更できる」。動いているサーバーに手を入れて、直しながら使い続けるやり方。
- Immutable
- 「変更しない」。一度作ったサーバーはいじらず、変えるときは新しく作って取り替えるやり方。
- イメージ
- OSやアプリ、設定をまとめて焼き込んだ型。同じイメージからは同じサーバーができる。
- スノーフレーク
- 手作業の変更が積み重なり、ほかと微妙に違う一点ものになってしまったサーバー。
- 構成ドリフト
- 本来そろっているはずの複数のサーバーの中身が、少しずつずれていくこと。
まとめ
直しながら使うサーバーは、変更が積み重なるほど中身がずれて、再現できなくなります。Immutable Infrastructure は動いているものに手を入れず、変更はイメージに焼き込んで丸ごと取り替えます。全台がいつも同じ中身になり、壊れても戻したくてもイメージから作り直すだけで済むのです。