CloudFormationの新機能、Expressモードを試してみた
はじめに
2026年6月30日、CloudFormationにExpressモードが追加されました。
Expressモードは、安定化確認(Eventual consistency check)を待たずにデプロイを完了する新しいモードです。通常モードとの違いを整理します。
| 通常モード | Express モード | |
|---|---|---|
| デプロイ完了タイミング | リソースの安定化確認完了後 | リソース設定の適用確認後 |
| 安定化確認(Eventual consistency check) | 完了まで待機 | 完了を待たずにデプロイ完了(バックグラウンドで継続) |
| ロールバック | デフォルト有効 | デフォルト無効 |
| 依存リソースの一時的エラー | — | CloudFormation が自動リトライ |
| テンプレートの変更 | — | 不要 |
| 追加料金 | — | なし |
公式ブログでは「最大4倍の高速化」と紹介されています。
以前、cdkd(CloudFormationを経由せずSDKで直接デプロイするツール)を使って同じ構成を検証しました。IAM Role + InstanceProfile + EC2構成のデプロイが約6.7倍速くなることを確認しています。
この記事では同じ構成を使い、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モードでは特に、デプロイ前にエラーを弾けることの安心感が大きくなります。詳細は以下の記事で検証しています。









