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

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

最終更新:
💡 修理せずに新品に交換する「使い捨てサーバー」の考え方

稼働中のサーバーなどにパッチや設定変更をその場で当てず、変更が必要なときは新しいイメージから作った環境に入れ替える運用方式。

📌 このページのポイント
ミュータブル(その場で変更) サーバー v1.0 + パッチ A + パッチ B + 設定変更 C + 手動修正 D ⚠ 構成ドリフトが起きやすい 変更が積み重なり 再現が困難に… VS イミュータブル(作り直し型) ① 新イメージ を構築 v2.0 をビルド ② 新サーバー をデプロイ v2.0 を起動 旧 v1.0 ③ 破棄する 新 v2.0 ✓ 稼働中 ✓ 毎回テスト済みイメージから起動 ✓ 同じイメージで環境をそろえやすい ✓ 旧イメージが残っていれば戻しやすい
イミュータブルインフラストラクチャの考え方
ひよこ ひよこ
なんでサーバーを変更しちゃダメなの?パッチ当てればよくない?
ペンギン先生 ペンギン先生
稼働中のサーバーにパッチや設定変更を重ねていくと、全部を管理しきれずに想定と違う状態になることがあるんだ。これを「構成ドリフト」と呼ぶよ。毎回テスト済みのイメージから作り直せば、既知の状態から始められるからドリフトを減らせるんだよ。
ひよこ ひよこ
具体的にどうやるの?
ペンギン先生 ペンギン先生
例えばアプリを更新するときに、新しいバージョンを含んだAMI(マシンイメージ)やコンテナイメージを作ってテストし、そこから新しいサーバーを起動する。問題がなければ通信を新しいほうへ切り替えて、古いサーバーを破棄するよ。稼働中のサーバーにSSHしてファイルを直接直す、ということはしないんだ。
ひよこ ひよこ
おもしろい!コンテナはイミュータブルインフラストラクチャの一種なの?
ペンギン先生 ペンギン先生
一種というより、この考え方ととても相性がいい技術だよ。新しいバージョンは新しいイメージとしてビルドして、KubernetesのDeploymentなら古いPodを新しいイメージのPodに置き換えていく。ただ、コンテナを使っていても中に入って手で直せば、その場の変更になってしまうから注意だね。
ひよこ ひよこ
サーバーを捨てちゃったら、中のデータやログは消えない?
ペンギン先生 ペンギン先生
そこは設計で分けるんだ。データベースのファイルやログなどの「データ」は、作り直すイメージとは別物として扱うよ。例えばログは集中管理のログ基盤へ送っておけば、サーバーを捨てても調査に使えるね。
ひよこ ひよこ
でも「サーバーに入って調査したい」ときはどうするの?本番で問題が起きたときとか。
ペンギン先生 ペンギン先生
これが運用上の悩みどころだね。ログやメトリクスだけでは原因がわからないこともある。Kubernetesには「エフェメラルコンテナ」という調査用の一時コンテナを動いているPodに後から追加する機能があって、アプリのイメージにデバッグ用ツールを入れていなくても調べられるよ。ただし一度追加したエフェメラルコンテナは、そのPodから外すことも変更することもできないから、使う場面は慎重に選ぼうね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「イミュータブルインフラストラクチャ」って出てきたら「稼働中のサーバーを直さず、新しく作った環境に入れ替える運用方式のことだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Immutable Infrastructure」 = 不変のインフラ
💬 Immutable(変更不可能な)+ Infrastructure(インフラ)。一度デプロイしたら変えずに入れ替える、という考え方だよ。Kief Morris氏の解説(2013年)では、同僚のBen Butler-Cole氏が「Immutable Server」という呼び名を付けたと紹介されているよ

参考資料

← 用語集にもどる