【いみゅーたぶるいんふらすとらくちゃ】

イミュータブルインフラストラクチャ とは?

💡 修理せずに新品に交換する「使い捨てサーバー」の考え方
📌 このページのポイント
ミュータブル(従来型) サーバー v1.0 + パッチ A + パッチ B + 設定変更 C + 手動修正 D ⚠ 構成ドリフト発生 変更が積み重なり 再現が困難に… VS イミュータブル(新方式) ① 新イメージ を構築 v2.0 をビルド ② 新サーバー をデプロイ v2.0 を起動 旧 v1.0 ③ 破棄する 新 v2.0 ✓ 稼働中 ✓ 環境が常にクリーン ✓ 同じイメージで再現可能 ✓ ロールバックも簡単
イミュータブルインフラストラクチャの考え方
ひよこ ひよこ

なんでサーバーを変更しちゃダメなの?パッチ当てればよくない?

ペンギン先生 ペンギン先生

サーバーに何度もパッチを当てたり設定を変えたりしていると「今この状態はどうなっているのか」が誰にもわからなくなるんだ。これを「設定のドリフト」と呼ぶ。3年間パッチを当て続けたサーバーと、新しく同じ手順で構築したサーバーは、実は微妙に違う状態になっていることがある。イミュータブルなら毎回新品だから、そういう問題が起きないんだよ。

ひよこ ひよこ

具体的にどうやるの?

ペンギン先生 ペンギン先生

例えばアプリを更新するときに、新しいバージョンを含んだAMI(マシンイメージ)やDockerイメージを作って、そこから新しいサーバーを起動する。ロードバランサーの向きを新しいサーバーに切り替えて、古いサーバーを破棄する。サーバーに直接SSHしてファイルを編集する、ということはしないんだ。

ひよこ ひよこ

おもしろい!コンテナはイミュータブルインフラストラクチャの一種なの?

ペンギン先生 ペンギン先生

そう、コンテナはこの考え方ととても相性がいい。Dockerイメージは一度ビルドしたら変更されないし、新しいバージョンは新しいイメージとしてビルドする。Kubernetesが古いPodを消して新しいPodを起動するのも、まさにイミュータブルの考え方だよ。

ひよこ ひよこ

でも「サーバーに入って調査したい」ときはどうするの?本番で問題が起きたときとか。

ペンギン先生 ペンギン先生

これがイミュータブルインフラストラクチャの運用上の悩みどころでね。理想的にはサーバーSSHしないから、問題調査はログやメトリクスを外部の監視基盤(CloudWatch、Datadog等)に集約しておく前提なんだけど、現実にはログだけでは再現できない問題がある。メモリリークファイルディスクリプタの枯渇みたいな状態依存の問題は、そのサーバーの中を見ないとわからない。でも見るためにSSHすると「変更しない」原則が崩れる。だから「デバッグ用のサイドカーコンテナ」や「エフェメラルコンテナ」のような「見るけど変えない」仕組みが重要になってくるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「イミュータブルインフラストラクチャ」って出てきたら「サーバーを変更せず、新しく作り直して入れ替える運用方式のことだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Immutable Infrastructure」 = 不変のインフラ
💬 Immutable(変更不可能な)+ Infrastructure(インフラ)。一度作ったら変えない、というルールだよ
← 用語集にもどる