💡

【アップデート】CloudFormationのドリフト対応変更セットの確認

に公開

概要

2025年11月18日にCloudFormation(以下、CFn)の新しい変更セットとしてドリフト対応変更セットが公開されました。

https://aws.amazon.com/jp/about-aws/whats-new/2025/11/configuration-drift-enhanced-cloudformation-sets/

既存の変更セットではCFnに登録済みのテンプレートと更新対象のテンプレートを比較して差分を判定していました。
そのため、CFnで作成したリソースのCFnで管理しているプロパティがCFn外で変更されてても、CFn更新時には差分として判定されず、ドリフトが発生したままとなる問題がありました。

新しく公開されたドリフト対応変更セットでは、CFn外で更新されたドリフトも含めて変更セットを作ってくれるようなので確認してみました。

確認方法

初期構築で使うCFnテンプレート

以下のテンプレートファイルを使ってVPCを作成します。

AWSTemplateFormatVersion: 2010-09-09

Resources:
  TestVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      Tags:
       - Key: Name
         Value: TestVPC

今回の検証では、以下のCFnプロパティに該当する設定をAWSマネコンから修正し変更セットを確認します。

プロパティ 設定値 変更値 備考
EnableDnsHostnames false true このプロパティはCFnテンプレートで明示的に指定していない場合、デフォルトでfalseとなります(デフォルトVPCを除く)。
TagsのNameタグの値 TestVPC TestVPC-edit

変更セット作成時に使うCFnテンプレート

変更セット作成時には、 EnableDnsSupportfalse に設定したCFnテンプレートを使います。

検証環境構築

CFnで構築した環境で以下を確認しました。

  • VPCのNameタグがTestVPCであること
  • DNS解決(EnableDnsSupport)が有効であること
  • DNSホスト名(EnableDnsHostnames)が無効であること

下記は構築した検証環境のVPCの画面です。
検証環境のVPCの画面(初期)

検証環境の変更

変更セットの確認を実施する前に、以下を変更します。

  • VPCのNameタグをTestVPC-editに変更
  • DNSホスト名(EnableDnsHostnames)を有効に変更

下記は上記の変更を反映した検証環境のVPCの画面です。
検証環境のVPCの画面(変更後)

既存の変更セット

CFnテンプレートで変更した EnableDnsSupport の変更が検出されていますが、手動で変更した以下の2点は変更として検出されませんでした。

  • EnableDnsHostnames
  • TagsのNameタグの値

下記は既存の変更セットでリソースの変更を確認した画面です。
既存の変更セット

ドリフト対応変更セット

ドリフト対応変更セットではCFnテンプレートで変更した EnableDnsSupport の変更に加えて、ドリフトとして検出されたTagsのNameタグの値も変更対象として検出されました。
一方で、CFnテンプレートのプロパティとして明記していない EnableDnsHostnames はドリフトとして検知されないため、ドリフト対応変更セットを使っても変更されません。

下記はドリフト対応変更セットでリソースの変更を確認した画面です。
ドリフト対応変更セット

このCFnテンプレートに明記していないプロパティが変更セットとして認識されない件は、下記のドキュメントに注記があります。

CloudFormation は、スタックテンプレートを通じて、またはテンプレートパラメータを指定することによって、明示的に設定されたプロパティについてのみドリフトを判断します。これには、リソースプロパティのデフォルト値は含まれません。ドリフトを決定する目的で CloudFormation にリソースプロパティを追跡させるには、デフォルト値に設定している場合でも、プロパティ値を明示的に設定します。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html#what-is-drift

まとめ

  • 既存の変更セット:テンプレート間の差分のみ検出。ドリフトは検出されない。
  • ドリフト対応変更セット:テンプレート間の差分+ドリフトも検出・修正対象。

所感

ドリフト対応変更セットがリリースされたことで、意図しない変更が発生していた際にCFnテンプレートの状態と一致させることが容易になりました。

今回の検証からは話がそれますが、CFnテンプレートに未記載のパラメータもデフォルト値から変わっていたらドリフトとして認識してくれるようになるとよいなと思っています。
そうなれば、デフォルト値でよいものはCFnテンプレートに書かなくても済むようになるので。。。

Discussion