エンジニアの皆さん、こんにちは。
インフラの世界で最も恐ろしい言葉は何だと思いますか? それは「誰かがコンソールをポチった」です。
IaC(Infrastructure as Code)で完璧に管理していたはずの環境が、深夜の緊急対応や「ちょっと確認」という安易な操作で崩れ去る。コードと実環境の乖離、すなわち「ドリフト(Drift)」は、チームの信頼とインフラの安定性を蝕む静かなる癌です。
今日は、AWS CloudFormationのドリフト検出機能を使い、この「見えない綻び」を完全に掌握し、自動修復へ繋げるための「現場の極意」を伝授します。
—
1. なぜ「ドリフト」を許してはいけないのか?
IaCの本来の目的は「再現性」です。しかし、手動変更が一度でも混ざれば、その再現性は死にます。
- 復旧困難: 障害時にIaCで再構築しようとしても、手動変更分が適用されず、原因不明のバグが再発する。
- セキュリティホール: 意図せず許可されたセキュリティグループの穴が、ドリフトによって放置される。
- コストの肥大化: 使っていないリソースの変更や設定ミスが、請求書を押し上げる。
CloudFormationのドリフト検出は、あなたのコード(テンプレート)と、AWS上の実リソースを突き合わせ、「何が、どう変わったか」を明確にする強力な武器です。
—
2. ハンズオン:ドリフト検出の自動化パイプラインを構築する
単にコンソールで「ドリフト検出」ボタンを押すのは初心者までです。プロは「検知したら即座に通知し、自動で是正する」仕組みを組みます。
ステップ1:ドリフト検出の実行(AWS CLI)
まずは、特定のスタックに対してドリフト検出をキックするコマンドを覚えましょう。
特定のスタックのドリフト検出を開始
aws cloudformation detect-stack-drift –stack-name my-production-stack
実行結果(StackDriftDetectionId)を確認し、ステータスを取得
aws cloudformation describe-stack-drift-detection-status –stack-drift-detection-id
ステップ2:EventBridgeによる自動検知の罠と突破口
CloudFormationのドリフト検出完了イベントは、EventBridge経由でキャッチできます。しかし、実は「ドリフトが発生したこと自体」を通知するには、AWS Configとの連携が不可欠です。
1. AWS Configの有効化: `AWS::CloudFormation::Stack` リソースの変更を監視対象にします。
2. EventBridgeルールの作成: Configが「COMPLIANT(準拠)」から「NON_COMPLIANT(非準拠)」に変わった瞬間にLambdaを起動させます。
ステップ3:自動修復ワークフロー(Lambda)
検知したドリフトをSlackやSNSに飛ばすだけでなく、自動的に「スタックの再適用」を試みるコードの雛形です。
import boto3
def lambda_handler(event, context):
client = boto3.client(‘cloudformation’)
stack_name = event[‘detail’][‘resourceId’] # 非準拠になったスタック
# 現場の知恵: 闇雲に修正せず、まずはドリフト詳細をログに出力し、
# 本番環境であれば即座に承認ワークフロー(Systems Managerなど)へ繋ぐのが定石です。
print(f”ドリフトを検知しました: {stack_name}”)
# 自動修復のトリガー:スタック更新(テンプレートを再適用して強制同期)
# 注意: 本番環境では慎重に設計すること!
# client.update_stack(StackName=stack_name, UsePreviousTemplate=True)
return {“status”: “Drift Alerted & Workflow Triggered”}
—
3. プロの現場での「運用の鉄則」
ツールを導入するだけでは不十分です。以下のルールをチームに徹底してください。
1. 「手動変更」は例外ではなく「失敗」と定義する
- コンソール操作が必要だった場合は、必ずその場でコードに反映し、Pull Requestを送るまでをセットにする。
2. ドリフトの定期スキャンをスケジュール実行する
- EventBridge Schedulerを使い、深夜などのトラフィックが少ない時間にCloudFormationのドリフト検出を定期実行させ、朝一番に「昨夜、ドリフトは発生していないか?」を確認する習慣をつけましょう。
3. 「修復」は「更新」と同一視する
- ドリフトを直すことは、IaCの正当性を回復する作業です。自動修復を過信せず、常に「コードが正」という状態を維持するためのデプロイパイプラインを整備してください。
—
最後に:自動化がもたらす「本当の余裕」
ドリフト検出をマスターすれば、もうインフラの些細な変更に怯える必要はありません。「何かあったら検知してくれる」「自動で記録が残る」という安心感こそが、エンジニアの創造性を最大化させます。
次は、TerraformやAWS CDKを使ったドリフト対策にも踏み込んでみましょう。技術の深淵はまだまだ深いです。
これをマスターすれば、あなたの管理する環境は「誰にも侵されない聖域」へと進化します。さあ、今すぐコンソールを閉じて、コードを書いていきましょう。応援していますよ。