手動変更しても CloudFormation のドリフトが検出されない原因を教えてください
困っていた内容
CloudFormation で作成したリソースを AWS マネジメントコンソールから手動で変更しました。
「ドリフトの検出」を行いましたが、IN_SYNCとなりドリフトが検出されません。なぜでしょうか。
どう対応すればいいの?
次の条件を満たしているか確認してください。
- 対象リソースがドリフト検出をサポートしているか
- テンプレートで明示的にプロパティ(値)を設定しているか
- AWS 公式ドキュメント記載のエッジケースに該当しないか
対象リソースがドリフト検出をサポートしているか
CloudFormation で作成できる場合も、リソースタイプによってはドリフト検出がサポートされていない場合があります。
リソースタイプごとのサポート状況は次のドキュメントをご確認ください。
テンプレートで明示的にプロパティ(値)を設定しているか
ドリフトが検出できるのは、テンプレートで明示的に設定したプロパティ(値)のみです。
テンプレートで設定しておらず、デフォルト値が適用された値を変更してもドリフトは検出されません。
ドリフト検出を使用してスタックとリソースへのアンマネージド型設定変更を検出する - AWS CloudFormation
CloudFormation は、スタックテンプレートを通じて、またはテンプレートパラメータを指定することによって、明示的に設定されたプロパティについてのみドリフトを判断します。これには、リソースプロパティのデフォルト値は含まれません。
AWS 公式ドキュメント記載のエッジケースに該当しないか
上記に該当しない場合もエッジケースに該当する場合、ドリフトが正常に検出されない場合があります。
具体的なエッジケースについては、次のドキュメントをご確認ください。
ドリフト検出を使用してスタックとリソースへのアンマネージド型設定変更を検出する - AWS CloudFormation
ドリフト検出結果を正しく解釈するために、これらのエッジケースに注意する必要があります。
参考資料
CloudFormation で作成したリソースを手動で変更してもいいですか?
いいえ、CloudFormation で作成したリソースは CloudFormation から変更することがベストプラクティスであるため、CloudFormation 以外の方法で変更しないでください。
スタックを起動した後、CloudFormation コンソール、API、AWS CLI を使用して、スタック内のリソースを更新します。スタックのリソースを CloudFormation 以外の方法で変更しないでください。変更するとスタックのテンプレートとスタックリソースの現在の状態の間で不一致が起こり、スタックの更新または削除でエラーが発生する場合があります。これをドリフトと呼びます。
CloudFormation は、スタックテンプレートを通じて、またはテンプレートパラメータを指定することによって、明示的に設定されたプロパティについてのみドリフトを判断します。これには、リソースプロパティのデフォルト値は含まれません。ドリフトを決定する目的で CloudFormation にリソースプロパティを追跡させるには、デフォルト値に設定している場合でも、プロパティ値を明示的に設定します。
…(中略)…
特定のエッジケースでは、CloudFormation が正確なドリフト結果を返すことができない場合があります。ドリフト検出結果を正しく解釈するために、これらのエッジケースに注意する必要があります。







