TL

不変インフラ(Immutable Infrastructure)

動いているサーバを直さず、新しく作り直して丸ごと入れ替える運用方式。手作業による“ズレ”をなくし、ロールバックも入れ替えるだけで済む。

中級不変インフラコンテナIaCデプロイ最終更新: 2026-06-04
TL;DR要点だけ先に
  • 1.不変インフラは “直さない・作り直す”:本番サーバに手を入れず、イメージから新しい環境を作って入れ替える。
  • 2.ねらいは 構成ドリフトとスノーフレークサーバの撲滅:環境はコードとイメージで再現でき、手作業の積み重ねが消える。
  • 3.うれしさは ロールバックが簡単:問題が出たら前のイメージに戻すだけ。コンテナや IaC と相性が良い。

可変インフラとは何が違う?

従来の 可変(Mutable)インフラ は、稼働中のサーバに SSH で入って直接更新 します。

  • apt upgrade でパッケージを上げる、設定ファイルを書き換える、パッチを当てる…
  • サーバは 作った後もずっと変化し続ける

一見ふつうですが、この「あとから手を入れる」が積み重なると 問題の温床 になります。不変インフラはここを断ち、更新=入れ替え に置き換えます。

観点可変インフラ(Mutable)不変インフラ(Immutable)
更新方法稼働中サーバを直接変更新イメージを作って入れ替え
サーバの寿命長く使い育てる(ペット)使い捨て(家畜)
状態の再現性履歴に依存しズレやすいイメージで毎回同じ
ロールバック手作業で逆操作(難)前のイメージに戻すだけ(易)
障害調査“その1台”を調べる壊れたら捨てて作り直す
ペット vs 家畜

よく使われるたとえが 「ペットではなく家畜(Cattle, not Pets)」。ペットは名前を付けて大事に治療しますが、家畜は番号で管理し、不調なら 群れごと入れ替え。不変インフラのサーバは後者で、1台にこだわらない のが肝です。

なぜ作り直すのか:ドリフトとスノーフレーク

手作業の更新を続けると、実際の構成が「あるべき姿」から少しずつズレて いきます。これが 構成ドリフト(Configuration Drift) です。

そして、緊急対応や試行錯誤の手当てが積み重なった結果、誰も全体を再現できない“一点もの”のサーバ ができあがります。これが スノーフレークサーバ(Snowflake Server)。雪の結晶のように 二つと同じものがない、という皮肉な呼び名です。

  • 「本番だけ動く」「あのサーバだけ落とせない」状態になりがち
  • 同じ手順で作っても 同じ環境が再現できない
  • 障害時、何がどう変わっているのか分からない

不変インフラでは、変更を直接当てずイメージを作り直す ため、ドリフトが生まれる隙がありません。稼働環境は常に 「ビルドした時のまま」 に保たれます。

“本番に手を入れて直す”が最大のアンチパターン

不変運用をうたいながら、障害時につい 本番コンテナへ exec して直接修正 すると、その瞬間に ドリフトが復活 します。直すのは イメージ(=設計図)側 で、稼働中の環境は 必ず作り直して入れ替える。「動いているものを触らない」を徹底することが価値の源泉です。

どう実現する:イメージ / コンテナ / IaC

不変インフラは概念であり、特定ツールの名前ではありません。実際には次の組み合わせで成り立ちます。

  • イメージ化:OS・ランタイム・アプリ・設定を 1つのイメージに固める。マシンイメージ(AMI 等)や コンテナイメージ(Docker)。
  • 構成のコード化:環境の作り方を コードで宣言 する。サーバ構成は IaC で、サーバの中身は Dockerfile などで。
  • 入れ替えデプロイ:新イメージで新インスタンスを起動し、ロードバランサの向き先を切り替えてから旧を破棄

コンテナはこの考え方をそのまま体現しています。Dockerfile から作ったイメージは 読み取り専用 で、起動するたびに同じ状態。詳しくは コンテナとは(VMとの違い) も参照。

# イメージ=不変な“設計図”。更新はこのファイルを変えて作り直す
FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
CMD ["node", "server.js"]

ビルドしたイメージにバージョンの タグ を付けておくと、入れ替えも巻き戻しも タグを指すだけ になります。

# v2 をビルドして稼働、問題が出たら v1 に戻すだけ
docker build -t myapp:2.0.0 .
# 障害時のロールバック(前のイメージへ入れ替え)
kubectl set image deployment/myapp app=myapp:1.9.3

うれしさ:ロールバックと再現性

入れ替え前提だからこそ、運用が安定します。

  • ロールバックが容易:問題が出たら 前のイメージに差し替えるだけ。逆操作の手順書はいらない。
  • 環境差が消える:開発・ステージング・本番で 同じイメージ を使えば「自分の環境では動く」が起きにくい。
  • 水平スケールが楽:同一イメージから 何台でも同じ環境 を量産できる。
  • デプロイ手法と好相性:イメージごと入れ替えるので、デプロイ戦略(ブルーグリーン / カナリア)と自然に噛み合う。
ロールバック=“前のイメージに切り替える”だけ

可変インフラのロールバックは「当てた変更を逆順に剥がす」難作業。不変インフラなら 動作実績のある旧イメージへポインタを戻す だけで、状態が確実に巻き戻ります。戻り先が“確実に同じもの” である点が安心材料です。

つまずきポイント:状態(State)の置き場所

「サーバを捨てる」前提と相性が悪いのが データ(状態) です。インスタンスを消すと一緒に消えるもの を中に置いてはいけません。

  • DB・アップロードファイル・ログは 外部(マネージドDB・オブジェクトストレージ・ログ基盤) に逃がす
  • サーバ自身は ステートレス に保つ(捨てても困らない状態にする)
  • 設定値や秘密情報も イメージに焼き込まず、環境変数やシークレット管理で外から注入
“捨てられる”のはステートレスだから

不変インフラの前提は 状態を外に持ち出してあること。ここを怠ると、入れ替えのたびにデータが飛ぶ事故になります。「サーバは使い捨て、データは外で永続化」をセットで設計しましょう。

まとめ:いつ効くか

  • 手作業による“環境のズレ”に悩んでいる → 不変インフラでドリフトを断つ
  • ロールバックや再現性を重視したい → イメージ単位の入れ替えで安全に巻き戻す
  • コンテナや IaC を既に使っている → その延長で自然に取り入れられる

直さない・作り直す・状態は外へ」。この3点が不変インフラの背骨です。

DevOps/インフラ Article

不変インフラ(Immutable Infrastructure)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

不変インフラ

比較で見る軸

難易度: intermediate / カテゴリ: DevOps/インフラ / タグ数: 4

導入後に効く点

ねらいは 構成ドリフトとスノーフレークサーバの撲滅:環境はコードとイメージで再現でき、手作業の積み重ねが消える。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
DevOps/インフラ
タグ数
4

判断チェックリスト

  • 自社の用途が「不変インフラ / コンテナ」に近いか確認する。
  • 強みである「不変インフラは “直さない・作り直す”:本番サーバに手を入れず、イメージから新しい環境を作って入れ替える。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

不変インフラコンテナIaCデプロイ不変インフラコンテナIaCデプロイ
参考: 公式情報