はじめに

CloudFormationのスタック更新を行う際に、必ず使っているであろう変更セットに素晴らしいアップデートが入りました。

AWS CloudFormation ChangeSets now offer enhanced change visibility for deployments

今までの変更セットでも、スタックに対してどのようなリソースが作成、削除、再作成、更新されるかは確認出来たのですが、今回のアップデートにて、リソースの設定値を変更セットの作成前後で比較出来るようになりました。
Terraformでいう所のplanコマンドの実行結果をイメージいただくと良いです。
百聞は一見に如かずなので、実際に試してみましょう。

実際に試してみる

今回は、S3バケットで変更セットを実行します。
サンプルのyamlファイルを準備しました。

S3バケットのプロパティVersioningConfigurationでバージョニングの設定が出来ます。
停止中(Suspended)から有効(Enabled)に変更した時の画面をお見せします。

AWSTemplateFormatVersion: '2010-09-09'
Description: Deploy S3 Bucket for validation.
Resources:
  S3Bucket:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: !Sub change-visibility-s3bucket-${AWS::AccountId}
      PublicAccessBlockConfiguration: 
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
      VersioningConfiguration:
        Status: Suspended          
      BucketEncryption:
        ServerSideEncryptionConfiguration: 
          - ServerSideEncryptionByDefault: 
              SSEAlgorithm: AES256                  
      Tags:
        - Key: Name
          Value: !Sub change-visibility-s3bucket-${AWS::AccountId}

上記のテンプレートを読み込んでスタックを作成します。
初回に変更セットを作成すると以下のような画面になりました。

スタックを作成し、S3バケットが生成されたことを確認します。

続いて、yamlファイル内のバージョニングの設定を変更します。

AWSTemplateFormatVersion: '2010-09-09'
Description: Deploy S3 Bucket for validation.
Resources:
  S3Bucket:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: !Sub change-visibility-s3bucket-${AWS::AccountId}
      PublicAccessBlockConfiguration: 
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
      VersioningConfiguration:
        Status: Enabled          
      BucketEncryption:
        ServerSideEncryptionConfiguration: 
          - ServerSideEncryptionByDefault: 
              SSEAlgorithm: AES256                  
      Tags:
        - Key: Name
          Value: !Sub change-visibility-s3bucket-${AWS::AccountId}

その後、変更セットを作成し、「プロパティレベルの変更」タブの「詳細を表示」をクリックします。

リソース単位でプロパティが表示されるのは変わらないですが、変更前と変更後で比較出来るようになっていますね。

パスの項目をチェックすると、コード内でどこが更新されているかハイライトする事が出来ます。
分かりやすくなりましたね!

まとめ

変更セットは、差分把握がしにくいと感じていたため、とてもありがたいアップデートでした。
積極的に使っていきたいと思います!