AWS CloudFormation のドリフト対応変更セットを試してみる

こんにちは、SCSK齋藤です。

2025年の11月に AWS CloudFormation に関するアップデートが来ました。その内容について検証してみたいと思います。

 

ドリフト対応変更セット

アップデートは、ドリフト対応変更セットというもので、これはテンプレートの内容と実際のインフラの状況を比較した上で、変更セットを立てるという内容です。

AWS CloudFormation のドリフト対応変更セットで設定のドリフトを安全に処理 - AWS
AWS の新機能についてさらに詳しく知るには、 AWS CloudFormation のドリフト対応変更セットで設定のドリフトを安全に処理

図解すると下記のようなイメージです。

 

これまでの変更セットは、現在のテンプレートと、新しいテンプレートを比較して差分を抽出します。

しかし、ドリフト対応変更セットは、それに加えて実際のインフラの状況も見た上で変更差分を抽出します。

 

試してみた

今回はLambda関数を定義したCloudFormationを使って、ドリフト対応変更セットとはどのようなものなのかみていきたいと思います。

①Python3.11のランタイムのLambdaをデプロイ

下記テンプレートをまずデプロイしてみます。

AWSTemplateFormatVersion: '2010-09-09'
Description: Simple CloudFormation Template to create one AWS Lambda function
Resources:
  testlambda:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: "test-lambda"
      Handler: index.lambda_handler
      Runtime: python3.13
      Architectures:
        - arm64
      Role: !GetAttLambdaRole.Arn
      Code:
        ZipFile: |
          def lambda_handler(event, context):
          return {
            'statusCode': 200,
            'body': 'Hello from Lambda!'
         }

  LambdaRole:
   Type: "AWS::IAM::Role"
   Properties:
     RoleName: "my-function-role"
     AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Principal:
              Service: "lambda.amazonaws.com"
            Action: "sts:AssumeRole"
     Policies:
       - PolicyName: "MyPolicy"
         PolicyDocument:
         Version: "2012-10-17"
         Statement:
           - Effect: Allow
             Action:
               - logs:CreateLogGroup
             Resource: arn:aws:logs:ap-northeast-1:425086073817:*
           - Effect: Allow
             Action:
               - logs:CreateLogStream
               - logs:PutLogEvents
             Resource:
               - arn:aws:logs:ap-northeast-1:425086073817:log-group:/aws/lambda/test-lambda:*

上記をデプロイすることにより、Lambdaのランタイムは、3.11となります。

 

②マネジメントコンソールで、Python3.12にランタイムを変更します。

CloudFormationを用いずに、ランタイムを変更します。

この状態では、CloudFormation上はまだPython3.11のままです。

③CloudFormationを用いて、Python3.13にアップデートします。

ここからが本題です。

本ブログの①に記載したCloudFormationテンプレートをPython3.13に書き換えた上で実行します。

 

まず普通に変更セットを作成しようとします。

最初に、変更セットのタイプを指定しますが、そこでドリフト認識変更セットを選択します。

そして、新しいテンプレートをアップロードします。

この後の流れは、いつもの変更セット作成方法と同じため、変更セットの作成まで実施します。

 

 

変更セットを作成すると、下記のようなステータスとなり、「ドリフト済み」と表示されます。

 

JSONでも見てみますと、下記のようになります。(必要な部分のみピックアップしてます。)

beforeValueは、マネジメントコンソール上で変更した実際のインフラのランタイム設定ですね。afterValueは、新しいテンプレートのランタイムです。

その後にdriftと記載があり、previousValueは現在のテンプレート上のランタイムであるPython3.11です。

actualValueは、マネジメントコンソール上で変更した実際のインフラのランタイム設定であることがわかります。

この状態で変更セットを実行したら問題なくPython3.13にアップデートできました。

 

まとめ

今回はインフラの実際の状態を変更セットとして差分確認する機能を、簡単にですが検証しました。

JSON形式で見てみると、現在のテンプレートと、実際のインフラ、そして新しいテンプレートの内容が3つ分しっかりと比較できていることがわかりました。

この機能により、過去にマネジメントコンソール上で変更してしまった設定も、変更セット時にしっかりと気づくことができるようになったので、想定外のデプロイが起こってしまうといったことが少しでも減らせると考えております。

著者について

フロントエンドもバックエンドも両方少しずつ勉強して、フルスタックエンジニアを目指してます。
サーバレス開発の楽しさを実感中!

ANGEL Dojo 2021 ANGEL賞、ベストアーキテクチャ賞ダブル受賞
2023 Japan AWS Jr. Champions
2022〜24 Japan AWS All Certifications Engineers

齋藤友宏をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWSクラウド
シェアする
タイトルとURLをコピーしました