ドリフト検出
Infrastructure as Code(IaC)で管理しているリソースが、コード(テンプレート/設定ファイル)の定義と異なる状態になっていること、またはその乖離を検出するプロセス。
IaCの根幹は「コードが現実の唯一の真実(SSoT)である」という原則にある。ドリフトはこの原則を崩す現象だ。
ドリフトが発生する原因
- コンソールや手動CLIからのリソース変更
- 他のツールによる並行変更
- クラウドサービス側の自動変更(自動スケーリングなど)
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つのアプローチがある:
- テンプレートを実態に合わせる: 手動変更が正しいと判断した場合。テンプレートを修正して、現在の状態を正式なものとして採用する
- 実態をテンプレートに合わせる: 手動変更が誤りの場合。スタックを更新してテンプレートの定義に戻す
ドリフトを防ぐための原則
ドリフトの根本的な解決策は「コード以外での変更を禁止する」こと。コンソールからの手動変更を組織的に禁止し、すべての変更をコードとPull Requestを通じて行う運用が理想だ。
これはSSoT(Single Source of Truth)を徹底することとも一致する。
関連
- Infrastructure as Code - ドリフトが問題になる文脈
- CloudFormationスタック - AWS CloudFormationにおけるドリフト検出の対象
- Change Set - ドリフト検出と連携した変更プレビュー
- SSoT - ドリフトが侵食する「唯一の真実」の概念
- 冪等性 - IaCが保証しようとする性質