📝

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