AWS CloudFormation のドリフトとは
ドリフト検出を使用してスタックとリソースへのアンマネージド型設定変更を検出する - AWS CloudFormation
リソースの実際のプロパティ値が予期されるプロパティ値と異なる場合、そのリソースはドリフトしたと見なされます。
CloudFormation テンプレートの設定値と実際のリソースの設定値が異なる状況をドリフトと呼称しています。
機能概要
- ドリフトはスタック単位で検出される
- スタック内の 1 つ以上のプロパティが変更されている場合にドリフトが検出される
- ドリフトの検出がサポートされていないリソースも存在する
- ネストされたスタックのドリフトの検出はサポートされていない
- 特定のケースでは誤検知される場合もある
ドリフトによる影響
CloudFormation ベストプラクティス - AWS CloudFormation
スタックのリソースを CloudFormation 以外の方法で変更しないでください。変更するとスタックのテンプレートとスタックリソースの現在の状態の間で不一致が起こり、スタックの更新または削除でエラーが発生する場合があります。これをドリフトと呼びます。
ドリフトが発生した状態で CloudFormation スタックを更新、削除することでエラーが発生する可能性があります。
そのため、ドリフトが発生していない状態が理想的です。
やってみた
以下の CloudFormation テンプレートを使用してドリフトを発生させてみました。
AWSTemplateFormatVersion: "2010-09-09"
Resources:
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: my-vpc
01. CloudFormation スタックの作成
上記テンプレートで CloudFormation スタックを作成しました。
デプロイ完了後、VPC が作成されていることを確認します。

この状態でドリフトを検出しても、CloudFormation テンプレートと実際の VPC の値は一致しているのでドリフトは発生しません。

02. VPC の設定変更
手順 01 で作成した VPC のタグの値を VPC コンソール上から変更します。

この状態でドリフトを検出すると、CloudFormation テンプレートと実際の VPC のタグの値が異なるのでドリフトが発生します。

ドリフトの詳細を確認すると、タグの値が異なっていることを確認できます。

03. VPC の設定をロールバック
手順 02 で変更した VPC のタグの値を元の値に戻します。

この状態でドリフトを検出すると、CloudFormation テンプレートと実際の VPC の値は一致しているのでドリフトは解消されます。

なお、ドリフトの解消方法としては CloudFormation テンプレート側の値を実際のリソースの値に合わせる方法もあります。
また、インポート機能による解消も可能です。
詳細については以下のドキュメントをご参照ください。
インポートオペレーションでドリフトを解決する - AWS CloudFormation
まとめ
今回は AWS CloudFormation のドリフトについて紹介しました。
どなたかの参考になれば幸いです。
Discussion