ドリフト検出

Infrastructure as Code(IaC)で管理しているリソースが、コード(テンプレート/設定ファイル)の定義と異なる状態になっていること、またはその乖離を検出するプロセス。

IaCの根幹は「コードが現実の唯一の真実(SSoT)である」という原則にある。ドリフトはこの原則を崩す現象だ。

ドリフトが発生する原因

CloudFormationでのドリフト検出

# ドリフト検出の開始
aws cloudformation detect-stack-drift --stack-name my-stack

# 各リソースのドリフト詳細
aws cloudformation describe-stack-resource-drifts --stack-name my-stack

従来のChange Setは「前回デプロイしたテンプレート」と「新しいテンプレート」の2者比較だった。Drift-aware Change Sets(2025年導入)は「新テンプレート」「前回テンプレート」「実際のインフラ状態」の3者を比較するため、手動変更が入った環境でも正確な変更プレビューが可能になった。

ドリフトへの対処

2つのアプローチがある:

  1. テンプレートを実態に合わせる: 手動変更が正しいと判断した場合。テンプレートを修正して、現在の状態を正式なものとして採用する
  2. 実態をテンプレートに合わせる: 手動変更が誤りの場合。スタックを更新してテンプレートの定義に戻す

ドリフトを防ぐための原則

ドリフトの根本的な解決策は「コード以外での変更を禁止する」こと。コンソールからの手動変更を組織的に禁止し、すべての変更をコードとPull Requestを通じて行う運用が理想だ。

これはSSoT(Single Source of Truth)を徹底することとも一致する。

関連