IaC

イミュータブルインフラ いみゅーたぶるいんふら

Infrastructure as Code不変インフラデプロイコンテナImmutable InfrastructureBlue-Green デプロイ
イミュータブルインフラについて教えて

簡単に言うとこんな感じ!

「一度作ったサーバーは絶対に直接触らない!変えたいなら新しいサーバーを作り直す」っていうルールのことだよ。使い捨てのコップみたいなイメージで、洗って再利用するんじゃなくて、汚れたら新品に取り替えるってこと!


イミュータブルインフラとは

イミュータブルインフラ(Immutable Infrastructure) とは、「一度構築したサーバーやインフラ環境は、その後一切変更しない」という考え方です。英語の「Immutable(変更不可・不変)」がそのまま名前になっています。ソフトウェアのバージョンアップや設定変更が必要になったとき、既存のサーバーをいじるのではなく、新しいサーバーを丸ごと作り直してそちらに切り替えるというアプローチです。

従来のインフラ管理では、稼働中のサーバーにSSHでログインして設定ファイルを書き換えたり、パッケージをアップデートしたりするのが一般的でした(これを ミュータブルインフラ=変更可能なインフラ と呼びます)。しかしこのやり方では、「誰がいつどんな変更をしたか」が追いにくく、気づかないうちにサーバーごとに微妙な差異が生まれる「スノーフレーク問題(雪の結晶問題)」が発生しがちです。

イミュータブルインフラはこの問題を根本から解決します。変更履歴はコードで管理され、環境の再現性が保証されるため、障害からの復旧が早く、本番と検証の環境差異も生まれにくいのが最大の利点です。Infrastructure as Code(IaC)やコンテナ技術の普及とともに広く採用されるようになりました。


ミュータブル vs イミュータブル:どこが違う?

比較軸ミュータブルインフラ(従来型)イミュータブルインフラ
変更方法稼働中のサーバーを直接編集新しいサーバーを作成して切り替え
状態管理手動ログ・ドキュメント頼りコードで管理(Git等)
再現性低い(環境差異が生じやすい)高い(常にコードから同じ環境を構築)
ロールバック難しい(元の状態に戻しにくい)簡単(旧バージョンに切り替えるだけ)
障害リスク変更中に本番に影響が出る可能性あり切り替え前に新環境をテスト可能
代表的なツールAnsible(一部)、手動運用Docker、Packer、Terraform

覚え方:「使い捨てコップ」と「マイカップ」

  • ミュータブル = マイカップ。気に入ってるから洗って使い続ける。でも傷がついたり、汚れが落ちにくくなったりする。
  • イミュータブル = 使い捨てコップ。毎回新品。衛生的で状態が保証されている。

デプロイの流れ(イミュータブルの場合)

① コードを変更

② 新しいサーバーイメージ(AMI / Dockerイメージ等)をビルド

③ 新しいサーバーをプロビジョニング(起動・検証)

④ トラフィックを旧サーバーから新サーバーへ切り替え

⑤ 旧サーバーを廃棄

歴史と背景

  • 2000年代前半 — サーバーはオンプレミスの物理機器が主流。変更は直接ログインして手作業が基本。
  • 2006年 — AWS EC2のリリースにより、仮想サーバーを簡単に作成・廃棄できる時代が到来。「使い捨て」の概念が現実的に。
  • 2012年 — Chad Fowler が “Trash Your Servers and Burn Your Code” という記事でイミュータブルインフラの概念を広く提唱。
  • 2013年 — Dockerのリリース。コンテナという軽量な使い捨て実行環境が普及し、イミュータブルインフラの実践が一気にしやすくなる。
  • 2014年頃〜 — HashiCorpのTerraform・Packerなど、イミュータブルインフラを支えるIaCツールが充実。
  • 2015年〜現在Kubernetes(コンテナオーケストレーション)の普及により、イミュータブルインフラはクラウドネイティブ開発の標準的な考え方として定着。

関連する技術・デプロイ戦略との対応関係

イミュータブルインフラは単体では語れません。Blue-Greenデプロイカナリアリリース などのデプロイ戦略、IaCツールと組み合わせることで真価を発揮します。

イミュータブルインフラを支える技術スタック コードで定義(IaC) Terraform / Pulumi イメージのビルド Packer / Docker / AMI オーケストレーション Kubernetes / ECS Blue-Green デプロイ Blue(旧) 稼働中 → 廃棄予定 Green(新) 切替後に稼働 ✓ 検証済み カナリアリリース 旧バージョン 90%のトラフィック 安定稼働中 新バージョン 10%で試験運用 → 段階的拡大 どちらの戦略もイミュータブルインフラが前提 旧・新サーバーを「同時に存在させて切り替える」ことができるのは、 サーバーをコードから素早く何台でも作れる環境(IaC)があるから

Blue-Greenデプロイ は、旧バージョン(Blue)を残したまま新バージョン(Green)のサーバーを別に立ち上げ、問題がなければトラフィックを一気に切り替える手法です。イミュータブルインフラと相性が非常に良く、ロールバックも旧サーバーに戻すだけで済みます。

カナリアリリース は、新バージョンを一部のユーザーだけに先行公開し、問題がなければ段階的に全体へ展開する手法です。「炭鉱のカナリア」(危険を先に知らせる役)が名前の由来です。


関連する規格・RFC

※ イミュータブルインフラはベンダー中立の設計思想・プラクティスであり、IETF RFC・ISO・IEEE等の正式規格はありません。


関連用語

  • Infrastructure as Code — インフラの構成をコードで定義・管理する考え方
  • Terraform — HashiCorp製のIaCツール。イミュータブルインフラの実践に広く使われる
  • Docker — コンテナ型の仮想化技術。イミュータブルなイメージを作る代表的ツール
  • Kubernetes — コンテナのオーケストレーション基盤。イミュータブルインフラの運用に不可欠
  • Blue-Greenデプロイ — 旧・新環境を並列に用意してトラフィックを切り替えるデプロイ戦略
  • カナリアリリース — 新バージョンを一部ユーザーに先行公開して段階的に展開する手法
  • スノーフレークサーバー — 属人的な変更が積み重なり再現できなくなったサーバーの問題
  • CI/CD — 継続的インテグレーション・デリバリー。イミュータブルインフラの自動化を支えるパイプライン