イミュータブルインフラストラクチャとは?
イミュータブルインフラストラクチャは、デプロイ後にサーバーを決して変更しないアプローチです。変更するには、新しいバージョンをビルドして古いものを完全に置き換えます。
従来のサーバーはインプレースで更新されます。SSH で入り、パッケージにパッチを当て、config を調整します。イミュータブルインフラストラクチャはそれを拒否します。代わりに、すべての変更が完全にビルドされた真新しい artifact を生み出し、実行中のものを置き換えるため、デプロイが予測可能になり、あるクラスの drift をなくします。
mutable 対 immutable
mutable なサーバーは長寿命で、その寿命を通じて継続的に変更されます。immutable なサーバーは一度実行されると決して変更されません。新しい要件は、新鮮なイメージをビルドして入れ替えることを意味します。実行中のフリートは常に既知のバージョン管理された定義に一致し、蓄積された手動編集はありません。
実際にどう機能するか
OS、依存関係、アプリケーションを含む完全なマシンイメージ(またはコンテナイメージ)をベイクし、バージョン管理し、そこからインスタンスをデプロイします。何かを更新するには、新しいイメージをビルドしてロールアウトし、古いインスタンスを退役させます。実行中のサーバーではなく、イメージが変更の単位です。
なぜ drift を防ぐか
構成の drift は、時間の経過に伴うインプレースな変更から蓄積します。イミュータブルインフラストラクチャは、そうした変更を構造的に不可能にします。サーバーは起動後に決して変更されないため、定義から逸脱することができず、同じイメージからビルドされたすべてのインスタンスは同一です。
信頼性の利点
イミュータブルなデプロイは非常に再現性が高いです。テストしたイメージがまさに実行するイメージなので、「staging では動くが prod では失敗する」という驚きが減ります。rollback も些細です - 前のイメージを再デプロイするだけです。そしてパッチではなく置き換えることは、悪いホストからの回復が単に新鮮なものを起動することを意味します。
トレードオフ
このアプローチは堅実なイメージビルド自動化を必要とし、ステートレスなワークロードに最適です。永続的な状態は、immutable なインスタンスの外、データベースやアタッチされたストレージに置かなければなりません。変更のたびに再ビルドすることも、イメージを素早く生成できる速く信頼できる build pipeline を重視させます。
重要なポイント
- イミュータブルインフラストラクチャは、サーバーをインプレースで変更する代わりに置き換えます。
- インスタンスは起動後に決して変更されないため、構成の drift をなくします。
- 再現可能な deploy と些細な rollback を可能にしますが、強力なイメージ自動化を必要とします。