インフラストラクチャドリフト
IaC で定義した状態と実際のインフラの状態が乖離する問題
インフラストラクチャドリフトとは
インフラストラクチャドリフト (Infrastructure Drift) は、IaC (CloudFormation, Terraform) で定義した状態と、実際のインフラの状態が乖離する問題である。手動変更 (コンソール操作) が主な原因。
なぜ発生するか
なぜ発生するかを図で示す。
1. CloudFormation でセキュリティグループを作成 (ポート 443 のみ許可)
2. 障害対応で手動でポート 22 を追加 (コンソールから)
3. CloudFormation のテンプレートにはポート 22 がない
→ テンプレートと実態が乖離 (ドリフト)
| 原因 | 例 |
|---|---|
| 手動変更 | コンソールから設定を変更 |
| 緊急対応 | 障害時に手動でリソースを変更 |
| 別ツールでの変更 | Terraform と CloudFormation の併用 |
| 外部サービスの変更 | AWS が自動的に設定を変更 |
ドリフトの検出
CloudFormation
Terraform
# 現在の状態と定義の差分を表示
terraform plan
# → 手動変更があれば差分として表示される
ドリフトの修正
手動変更をテンプレートに反映してデプロイする方法、手動作成したリソースを IaC にインポートする方法、テンプレートの状態に戻して手動変更を元に戻す方法がある。
ドリフトの予防
IAM で手動変更を制限してコンソール操作を禁止し、CI/CD でのみデプロイする。EventBridge + Lambda で定期的にドリフトを自動検出し、AWS Config でリソースの設定変更を監視する。
イミュータブルインフラとの関係
イミュータブルインフラストラクチャでは、サーバーを変更せず丸ごと置き換えるため、ドリフトが発生しない。Lambda + DynamoDB のサーバーレス構成も、サーバーの概念がないためドリフトが起きにくい。
基礎から学ぶなら関連書籍が手がかりになる。
この記事は役に立ちましたか?
関連用語
Terraform State
Terraform がインフラの現在の状態を管理するファイルとリモートバックエンド
イミュータブルインフラストラクチャ
サーバーを変更せず、新しいイメージで丸ごと置き換えるインフラ運用手法
AWS SAM
AWS のサーバーレスアプリケーションを定義・デプロイするためのフレームワーク
Infrastructure as Code
インフラの構成をコードで定義し、バージョン管理・自動化・再現性を実現する手法
GitOps
Git リポジトリを唯一の正として、インフラとアプリケーションの状態を宣言的に管理する運用手法
CloudFormation
AWS のインフラをテンプレート (YAML/JSON) で宣言的に定義・管理する IaC サービス
関連する記事
障害対応の夜に思い出す、あの本の 1 ページ
本番障害の緊迫した場面で、過去に読んだ技術書の知識が助けてくれた経験はありませんか。「いつか役立つ」知識が「今この瞬間」に変わる読書の価値を考えます。
あの有名 OSS のコードは、この本の影響を受けている
広く使われているオープンソースソフトウェアの設計には、特定の技術書の影響が色濃く反映されています。OSS のコードと技術書の関係を知ると、両方の理解が深まります。
技術書の「積ん読」を資産に変える - 未読本を活かすリファレンス読書術
積ん読を「解消すべき問題」ではなく「活用すべき資産」として捉え直す発想の転換と、未読の技術書をリファレンスライブラリとして運用する具体的な方法を紹介します。