CloudFormatonのドリフト検出の精度はコードで決まる

2022.01.12

こんにちは、AWS事業本部コンサルティング部のたかくにです。

今回はCloudFormationの「ドリフト検出」の仕様についてご紹介したいと思います。

本エントリでの「精度」とはドリフトで検出されるか否かを指しています。

結論

  • ドリフト検出は、「スタックで記載しているプロパティ」と「実際のリソースの設定値」の差異を検出する機能
  • ドリフトで検出させたい設定値はデフォルトと同一でも明示的に指定が必要

ドリフト検出とは

スタックによって作成されたリソースの変更点を検知する機能になります。

CloudFormation スタック全体のドリフトを検出

新 – CloudFormation ドリフト検出

AWS CloudFormationで手動で行った変更が検出可能になりました!!!

ドリフトを検出する際の考慮事項

実践

事前準備

今回は以下のようなコードを準備しました。EC2インスタンスを作成するコードになります。

ImageIdInstanceTypeに加え、DisableApiTerminationをドリフト検出する対象として追加しました。

AWSTemplateFormatVersion: "2010-09-09"
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: "ami-0218d08a1f9dac831" # Amazon Linux2 (ap-northeast-1)
      InstanceType: "t2.micro"
      DisableApiTermination: "false"

コード記述範囲内の変更

DisableApiTerminationを手動で変更してみましょう。

ドリフト検出を行うと以下のように差分が検出されました。

コード記述範囲外の変更

ここからが本題です。

コードで記述されていないタグを追加してみます。

再度、ドリフト検出を行いましたが手動変更した部分はコードに記述されていないため検出されていません。

つまり、ドリフト検出の対象はコードで記載したプロパティとなります。

まとめ

冒頭でも取り上げましたが、大事なことなのでもう一回取り上げます。

  • ドリフト検出は、「スタックで記載しているプロパティ」と「実際のリソースの設定値」の差異を検出する機能
  • ドリフトで検出させたい設定値はデフォルトと同一でも明示的に指定が必要

コードでリソースの変更管理を行いたいお客様となれば、「ドリフト検出」は欠かせない要素となります。

しかし、上記のような落とし穴があるので「どの設定値」を変更管理するかヒヤリングするとスムーズに開発が進むかと思います。

この記事が少しでもお役に立てば幸いです。