CloudFormationの新機能、Expressモードを試してみた

CloudFormationの新機能、Expressモードを試してみた

CloudFormation Expressモードが登場しました。安定化確認の完了を待たずにデプロイを完了できる新モードです。この記事では、IAM InstanceProfileを含むEC2構成を使い、テンプレートを変更せずにExpressモードを有効化した場合のデプロイ時間を通常モードと比較しました。
2026.07.01

はじめに

2026年6月30日、CloudFormationにExpressモードが追加されました。

https://aws.amazon.com/jp/about-aws/whats-new/2026/06/aws-cloudformation-cdk/

Expressモードは、安定化確認(Eventual consistency check)を待たずにデプロイを完了する新しいモードです。通常モードとの違いを整理します。

通常モード Express モード
デプロイ完了タイミング リソースの安定化確認完了後 リソース設定の適用確認後
安定化確認(Eventual consistency check) 完了まで待機 完了を待たずにデプロイ完了(バックグラウンドで継続)
ロールバック デフォルト有効 デフォルト無効
依存リソースの一時的エラー CloudFormation が自動リトライ
テンプレートの変更 不要
追加料金 なし

公式ブログでは「最大4倍の高速化」と紹介されています。

https://aws.amazon.com/jp/blogs/aws/accelerate-your-infrastructure-deployments-by-up-to-4x-with-aws-cloudformation-express-mode/

以前、cdkd(CloudFormationを経由せずSDKで直接デプロイするツール)を使って同じ構成を検証しました。IAM Role + InstanceProfile + EC2構成のデプロイが約6.7倍速くなることを確認しています。

https://dev.classmethod.jp/articles/cdkd-deploy-6x-faster-than-cloudformation/

この記事では同じ構成を使い、CloudFormationのExpressモード単体でどれだけ高速化するかを検証します。cdkdとの直接比較ではなく、CloudFormationの通常モードとの差分に焦点を当てます。

検証

検証構成

cdkd記事と同じ5リソース構成です。

IAM Role → IAM Policy
         → InstanceProfile → EC2 Instance ← SecurityGroup

検証環境

  • リージョン: ap-northeast-1(東京)
  • VPC: デフォルトVPC
  • インスタンスタイプ: t3.micro
  • AMI: Amazon Linux 2023 (x86_64)
  • AWS CLI: 2.35.13

CloudFormation テンプレート

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Benchmark: IAM Role + InstanceProfile + SecurityGroup + EC2 (Express mode comparison)'

Parameters:
  VpcId:
    Type: AWS::EC2::VPC::Id
  SubnetId:
    Type: AWS::EC2::Subnet::Id
  AmiId:
    Type: AWS::EC2::Image::Id

Resources:
  BenchRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: sts:AssumeRole

  BenchPolicy:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: bench-policy
      Roles:
        - !Ref BenchRole
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action: s3:GetObject
            Resource: '*'

  BenchInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Roles:
        - !Ref BenchRole

  BenchSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Benchmark security group
      VpcId: !Ref VpcId

  BenchInstance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t3.micro
      ImageId: !Ref AmiId
      SubnetId: !Ref SubnetId
      IamInstanceProfile: !Ref BenchInstanceProfile
      SecurityGroupIds:
        - !GetAtt BenchSecurityGroup.GroupId
      Tags:
        - Key: Name
          Value: bench-express-test

通常モードでのデプロイ

aws cloudformation create-stack \
  --stack-name bench-normal-mode \
  --template-body file://template.yaml \
  --parameters \
    ParameterKey=VpcId,ParameterValue=vpc-xxxxx \
    ParameterKey=SubnetId,ParameterValue=subnet-xxxxx \
    ParameterKey=AmiId,ParameterValue=ami-xxxxx \
  --capabilities CAPABILITY_IAM \
  --region ap-northeast-1

結果: 182秒create-stack 実行から aws cloudformation wait stack-create-complete 完了までのwall clock時間)

Express モードでのデプロイ

--deployment-config{"Mode": "EXPRESS"} を追加するだけです。テンプレートの変更は不要です。

aws cloudformation create-stack \
  --stack-name bench-express-mode \
  --template-body file://template.yaml \
  --parameters \
    ParameterKey=VpcId,ParameterValue=vpc-xxxxx \
    ParameterKey=SubnetId,ParameterValue=subnet-xxxxx \
    ParameterKey=AmiId,ParameterValue=ami-xxxxx \
  --capabilities CAPABILITY_IAM \
  --deployment-config '{"Mode": "EXPRESS"}' \
  --region ap-northeast-1

結果: 61秒(計測方法は通常モードと同じ)

デプロイ時間の比較

手法 所要時間 倍率
CloudFormation 通常モード 182秒 1.0x
CloudFormation Express モード 61秒 3.0x

スタックイベントの比較

所要時間の差がどこで生まれたか、スタックイベントを比較します。

通常モード: InstanceProfile の完了待ちに2分11秒

InstanceProfileの Resource creation Initiated から CREATE_COMPLETE まで2分11秒かかっています。

00:46:18 | CREATE_IN_PROGRESS | AWS::IAM::InstanceProfile | Resource creation Initiated
00:48:29 | CREATE_COMPLETE    | AWS::IAM::InstanceProfile

Express モード: InstanceProfile が1秒で完了

Expressモードでは、InstanceProfileの作成が即座に完了しています。

00:53:01 | CREATE_IN_PROGRESS | AWS::IAM::InstanceProfile | Resource creation Initiated
00:53:02 | CREATE_COMPLETE    | AWS::IAM::InstanceProfile | Resource operation completed using Express Mode. It may continue becoming available in the background.

以下のメッセージが記録されており、安定化の完了を待たずにデプロイを完了したことが分かります。

Resource operation completed using Express Mode. It may continue becoming available in the background.

スタック全体の完了時にも同様のメッセージが記録されました。

00:53:19 | CREATE_COMPLETE | bench-express-mode | Stack operation completed using Express Mode. Resources may continue becoming available in the background.

:::details通常モードのスタックイベント全文

00:45:54 | CREATE_IN_PROGRESS | bench-normal-mode   | User Initiated
00:45:59 | CREATE_IN_PROGRESS | BenchRole           |
00:45:59 | CREATE_IN_PROGRESS | BenchSecurityGroup  |
00:46:00 | CREATE_IN_PROGRESS | BenchRole           | Resource creation Initiated
00:46:01 | CREATE_IN_PROGRESS | BenchSecurityGroup  | Resource creation Initiated
00:46:02 | CREATE_IN_PROGRESS | BenchSecurityGroup  | Eventual consistency check initiated
00:46:07 | CREATE_COMPLETE    | BenchSecurityGroup  |
00:46:17 | CREATE_COMPLETE    | BenchRole           |
00:46:17 | CREATE_IN_PROGRESS | BenchInstanceProfile|
00:46:17 | CREATE_IN_PROGRESS | BenchPolicy         |
00:46:18 | CREATE_IN_PROGRESS | BenchInstanceProfile| Resource creation Initiated
00:46:18 | CREATE_IN_PROGRESS | BenchPolicy         | Resource creation Initiated
00:46:34 | CREATE_COMPLETE    | BenchPolicy         |
00:48:29 | CREATE_COMPLETE    | BenchInstanceProfile|
00:48:30 | CREATE_IN_PROGRESS | BenchInstance        |
00:48:32 | CREATE_IN_PROGRESS | BenchInstance        | Resource creation Initiated
00:48:44 | CREATE_IN_PROGRESS | BenchInstance        | Eventual consistency check initiated
00:48:44 | CREATE_COMPLETE    | BenchInstance        |
00:48:44 | CREATE_IN_PROGRESS | bench-normal-mode   | Eventual consistency check initiated
00:48:45 | CREATE_COMPLETE    | bench-normal-mode   |

:::

Expressモードのスタックイベント全文
00:52:47 | CREATE_IN_PROGRESS | bench-express-mode  | User Initiated
00:52:52 | CREATE_IN_PROGRESS | BenchRole           |
00:52:52 | CREATE_IN_PROGRESS | BenchSecurityGroup  |
00:52:53 | CREATE_IN_PROGRESS | BenchRole           | Resource creation Initiated
00:52:54 | CREATE_IN_PROGRESS | BenchSecurityGroup  | Resource creation Initiated
00:52:54 | CREATE_IN_PROGRESS | BenchSecurityGroup  | Eventual consistency check initiated
00:52:55 | CREATE_COMPLETE    | BenchSecurityGroup  | Resource operation completed using Express Mode.
00:53:00 | CREATE_IN_PROGRESS | BenchRole           | Eventual consistency check initiated
00:53:02 | CREATE_COMPLETE    | BenchRole           | Resource operation completed using Express Mode.
00:53:00 | CREATE_IN_PROGRESS | BenchInstanceProfile|
00:53:00 | CREATE_IN_PROGRESS | BenchPolicy         |
00:53:01 | CREATE_IN_PROGRESS | BenchInstanceProfile| Resource creation Initiated
00:53:01 | CREATE_IN_PROGRESS | BenchInstanceProfile| Eventual consistency check initiated
00:53:02 | CREATE_COMPLETE    | BenchInstanceProfile| Resource operation completed using Express Mode. It may continue becoming available in the background.
00:53:02 | CREATE_IN_PROGRESS | BenchPolicy         | Resource creation Initiated
00:53:02 | CREATE_IN_PROGRESS | BenchPolicy         | Eventual consistency check initiated
00:53:02 | CREATE_COMPLETE    | BenchPolicy         | Resource operation completed using Express Mode.
00:53:02 | CREATE_IN_PROGRESS | BenchInstance        |
00:53:12 | CREATE_IN_PROGRESS | BenchInstance        | Resource creation Initiated
00:53:17 | CREATE_IN_PROGRESS | BenchInstance        | Eventual consistency check initiated
00:53:18 | CREATE_COMPLETE    | BenchInstance        | Resource operation completed using Express Mode.
00:53:17 | CREATE_IN_PROGRESS | bench-express-mode  | Eventual consistency check initiated
00:53:19 | CREATE_COMPLETE    | bench-express-mode  | Stack operation completed using Express Mode. Resources may continue becoming available in the background.

通常モードの182秒のうち、InstanceProfileの完了待ちだけで2分11秒=131秒(全体の72%)を占めていました。
Expressモードではこの完了待ちがデプロイをブロックしないため、全体が61秒で完了しました。

注意事項

Expressモードを使う際に知っておくべき点です。

  • --deployment-config オプションはAWS CLI 2.35.13(2026年6月30日リリース)で追加されました。それ以前のバージョンではこのオプションを使用できません
  • ロールバックはデフォルト無効です。失敗時は即座に修正・リトライできる反面、中途半端な状態のリソースが残る可能性もあります。本番環境ではロールバックを有効化するオプションの指定を検討してください
  • リソースはバックグラウンドで安定化が継続します。デプロイ完了直後にリソースが完全に利用可能とは限りません。トラフィックを流す前に安定化を待つ必要があるケースでは通常モードが適しています
  • 依存リソースの一時的エラーはCloudFormationがリトライするとされています。IAMの伝播待ちなど、タイミングに起因する一部のエラーは追加の介入なしに解消される場合があります
  • CDKでは cdk deploy --express で有効になる予定です(対応 PR)。執筆時点では未リリースのため、今回はCloudFormation API(AWS CLI)での検証のみ実施しました

まとめ

CloudFormation Expressモードを使い、今回のIAM Role + InstanceProfile + EC2構成で検証しました。
デプロイ時間が182秒から61秒に短縮され、約3.0倍高速化しています。

短縮の主な要因は、通常モードでInstanceProfileの完了待ちに131秒かかっていた部分です。Expressモードでは安定化の完了を待たずにデプロイが完了するため、この待ち時間が全体の完了時間をブロックしなくなりました。

今回のテンプレートでは変更不要で、--deployment-config '{"Mode": "EXPRESS"}' を追加するだけで利用できました。バックグラウンドで安定化が継続する点には注意しつつ、開発環境などで繰り返しデプロイする場面では有効な時短手段になりそうです。

同日発表のPre-deployment Validationにより、CreateStack / UpdateStackでもプロビジョニング前にエラーが検知されるようになりました。ロールバックがデフォルト無効のExpressモードでは特に、デプロイ前にエラーを弾けることの安心感が大きくなります。詳細は以下の記事で検証しています。

https://dev.classmethod.jp/articles/cloudformation-cdk-pre-deployment-validation-all-stack-operations/

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事