EC2 Auto Scaling の Instance Refresh Checkpoints をやってみた
はじめに
テクニカルサポートの 片方 です。
今回は EC2 Auto Scaling のインスタンスの更新(Instance Refresh)で利用できる Checkpoints (チェックポイント) 機能を、検証環境で試してみました。
インスタンスの更新は、EC2 Auto Scaling グループ内のインスタンスを新しい設定に置き換える機能であり、最小正常率やインスタンスウォームアップを指定することで、サービス影響を抑えながら更新を進められます。
さらに、チェックポイントを使うと更新を途中で一時停止でき、そのタイミングで動作確認を挟めます。
段階的に置き換えを進められるため、「いきなり全台更新するのは不安」という場面で有効な機能です。
今回は AWS CLI を使ってチェックポイント付きのインスタンスの更新を実行し、進み方や停止タイミング、確認しておきたい注意点を見ていきます。
インスタンスの更新を使用するとき、段階的にインスタンスを置き換え、進行しながらインスタンスに検証を実行できます。段階的な置き換えを行うには、チェックポイントを追加します。チェックポイントは、インスタンスの更新が一時停止する時点です。チェックポイントを使用すると、Auto Scaling グループの更新の選択方法をより詳細に管理できます。これにより、アプリケーションが確実かつ予測可能な方法で機能することを確認できます。
やってみた (実装してみた)
今回は、起動テンプレートのバージョンを v1 から v2 に切り替え、その差分を EC2 Auto Scaling グループに反映するために、チェックポイント付きのインスタンスの更新(Instance Refresh)を実行してみます。インスタンスの更新は、新しい AMI や User data を反映した起動テンプレートに切り替えたあとで開始でき、開始後は describe-instance-refreshes コマンドで進捗を確認できます。
挙動を分かりやすくするため、EC2 Auto Scaling グループの台数を 4 台にし、MinHealthyPercentage を 75、CheckpointPercentages を [25, 50, 100] としました。4 台構成では 25 % が 1 台に相当し、さらに MinHealthyPercentage: 75 の条件もあるため、段階的に置き換わる様子を観察しやすい構成です。
また、グループサイズに対してチェックポイントの割合が小さすぎると、条件によってはチェックポイントがスキップされることがあるため、今回はその影響を受けにくい値にしています。
今回の検証構成
今回の構成は、できるだけシンプルにしました。
-
起動テンプレート v1
User data で簡易的な HTML を配置
画面に Version 1 と表示する -
起動テンプレート v2
User data の表示内容だけ Version 2 に変更 -
EC2 Auto Scaling グループ
希望容量: 4
最小容量: 4
最大容量: 4 -
インスタンスの更新設定
InstanceWarmup: 60
MinHealthyPercentage: 75
CheckpointPercentages: [25, 50, 100]
CheckpointDelay: 300
起動テンプレート v1 を作成する
まずは、初期状態として使用する起動テンプレート v1を作成します。今回は、Amazon Linux 2023 を前提に、User data で Apache HTTP Server をインストールし、Version 1 と表示するだけの簡易ページを配置しました。
User data
#!/bin/bash
dnf install -y httpd
cat > /var/www/html/index.html <<'EOF'
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>instance refresh sample</title>
</head>
<body>
<h1>Version 1</h1>
<p>EC2 Auto Scaling Instance Refresh Checkpoints sample</p>
</body>
</html>
EOF
systemctl enable httpd
systemctl start httpd


EC2 Auto Scaling グループを作成する
次に、先ほど作成した起動テンプレート v1 を使って、EC2 Auto Scaling グループを作成します。今回は 4 台固定で確認したいため、最小容量、希望容量、最大容量をすべて 4 にそろえます。
構成例は以下の通りです。
- 起動テンプレート: sample-asg-template
- 起動テンプレートバージョン: 1
- 最小容量: 4
- 希望容量: 4
- 最大容量: 4
- ヘルスチェック: EC2
この時点では、Auto Scaling グループ内の 4 台はすべて 起動テンプレート v1 から起動したインスタンスです。Auto Scaling グループの設定を後から変更しても、既存インスタンスは自動では入れ替わらず、新しい設定は以後の起動に反映されます。そのため、既存インスタンスにも新しい設定を適用したい場合に、インスタンスの更新を利用します。


起動テンプレート v2 を作成する
続いて、差分を反映した起動テンプレート v2を作成します。起動テンプレートは作成後に直接編集するのではなく、新しいバージョンを作成して差分を管理します。今回は User data の表示内容だけを Version 2 に変更しました。

User data
#!/bin/bash
dnf install -y httpd
cat > /var/www/html/index.html <<'EOF'
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>instance refresh sample</title>
</head>
<body>
<h1>Version 2</h1>
<p>EC2 Auto Scaling Instance Refresh Checkpoints sample</p>
</body>
</html>
EOF
systemctl enable httpd
systemctl start httpd

Auto Scaling グループが参照する起動テンプレートバージョンを更新する
次に、Auto Scaling グループが参照する起動テンプレートバージョンを v2 に切り替えます。これにより、今後起動される新しいインスタンスは v2 を使う状態になります。ただし、この変更だけでは既存の 4 台はそのまま残るため、続けてインスタンスの更新を実行します。
aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name sample-asg \
--launch-template LaunchTemplateName=sample-asg-template,Version=2
念のため EC2 Auto Scaling グループ sample-asg が参照している起動テンプレート名とバージョンを確認します。
aws autoscaling describe-auto-scaling-groups \
--auto-scaling-group-names sample-asg \
--query 'AutoScalingGroups[0].LaunchTemplate'
{
"LaunchTemplateId": "lt-02facb9d17633b22d",
"LaunchTemplateName": "sample-asg-template",
"Version": "2"
}
確認してみた
チェックポイント付きでインスタンスの更新を開始する
準備ができたら、チェックポイント付きでインスタンスの更新を開始します。今回は以下の条件で実行しました。
- InstanceWarmup: 60
- MinHealthyPercentage: 75
- CheckpointPercentages: [25, 50, 100]
- CheckpointDelay: 300
CheckpointPercentages は、新しいインスタンスとして置き換わった割合に応じて一時停止するポイントを定義します。また、最後の値は更新完了の基準にもなるため、すべてのインスタンスを置き換えたい場合は最終値を 100 にする必要があります。最終値を 100 未満にすると、その割合に達した時点で処理は停止し、自動では 100 % まで進まないので注意してください。
本検証では、EC2 Auto Scaling グループを作成したリージョンと同じ ap-northeast-1 の CloudShell 環境で実行しました。CloudShell はリージョンごとに利用するため、リージョンの取り違えに注意ください。
config.json を作成する
CloudShell ではホームディレクトリ配下でファイルを作れます。pwd を実行すると、通常は /home/cloudshell-user が作業ディレクトリとして表示されます。
まず、以下のコマンドで config.json を作成します。
cat > config.json <<'EOF'
{
"AutoScalingGroupName": "sample-asg",
"Preferences": {
"InstanceWarmup": 60,
"MinHealthyPercentage": 75,
"CheckpointPercentages": [25, 50, 100],
"CheckpointDelay": 300
}
}
EOF
ファイル内容を確認する
作成できたら、内容を確認します。
cat config.json

インスタンスの更新を開始する
次に、start-instance-refresh コマンドを実行します。
AWS CLI では、--cli-input-json file://... を使って JSON ファイルを入力として渡せます。
aws autoscaling start-instance-refresh \
--region ap-northeast-1 \
--cli-input-json file://config.json
成功すると、次のように InstanceRefreshId が返ります。
{
"InstanceRefreshId": "08b91cf7-8fa6-48e2-9d2e-xxxxxxxxxxxx"
}
進捗を確認する
進捗は、以下のコマンドで確認できます。
aws autoscaling describe-instance-refreshes \
--auto-scaling-group-name sample-asg
$ aws autoscaling describe-instance-refreshes \
> --auto-scaling-group-name sample-asg
{
"InstanceRefreshes": [
{
"InstanceRefreshId": "b032f361-cd52-43dc-a057-9a5c0749afa2",
"AutoScalingGroupName": "sample-asg",
"Status": "InProgress",
"StatusReason": "Waiting at 25 percent for checkpoint delay to pass before continuing. There are 236 seconds left. For example: i-050717b29041a5f91 has not been in service for long enough.",
"StartTime": "2026-03-29T07:23:45+00:00",
"PercentageComplete": 25,
"InstancesToUpdate": 3,
"Preferences": {
"MinHealthyPercentage": 75,
"InstanceWarmup": 60,
"CheckpointPercentages": [
25,
50,
100
],
"CheckpointDelay": 300,
"SkipMatching": false,
"AutoRollback": false,
"AlarmSpecification": {}
},
"Strategy": "Rolling"
}
]
}
見やすく絞るなら、例えば次のようにします。
aws autoscaling describe-instance-refreshes \
--auto-scaling-group-name sample-asg \
--query 'InstanceRefreshes[0].{Id:InstanceRefreshId,Status:Status,PercentageComplete:PercentageComplete,InstancesToUpdate:InstancesToUpdate}'
{
"Id": "b032f361-cd52-43dc-a057-9a5c0749afa2",
"Status": "InProgress",
"PercentageComplete": 25,
"InstancesToUpdate": 3
}
もちろん、マネジメントコンソール画面では以下のように確認できます。

時間が経過したので、再度コマンドで確認します。
~ $ aws autoscaling describe-instance-refreshes \
> --auto-scaling-group-name sample-asg \
> --query 'InstanceRefreshes[0].{Id:InstanceRefreshId,Status:Status,PercentageComplete:PercentageComplete,InstancesToUpdate:InstancesToUpdate}'
{
"Id": "b032f361-cd52-43dc-a057-9a5c0749afa2",
"Status": "InProgress",
"PercentageComplete": 25,
"InstancesToUpdate": 3
}
~ $ aws autoscaling describe-instance-refreshes \
> --auto-scaling-group-name sample-asg \
> --query 'InstanceRefreshes[0].{Id:InstanceRefreshId,Status:Status,PercentageComplete:PercentageComplete,InstancesToUpdate:InstancesToUpdate}'
{
"Id": "b032f361-cd52-43dc-a057-9a5c0749afa2",
"Status": "InProgress",
"PercentageComplete": 50,
"InstancesToUpdate": 2
}
~ $

この結果より、PercentageComplete が 25 から 50 に進み、InstancesToUpdate も 3 から 2 に減少していました。マネジメントコンソール側でも同様に進捗が確認できたため、チェックポイント付きの Instance Refresh は正常に開始され、段階的に更新が進んでいることを確認できました。なお、この時点では Status は InProgress であり、最終的な成功判定は Successful になるまで継続して確認します。
$ aws autoscaling describe-instance-refreshes \
> --auto-scaling-group-name sample-asg \
> --query 'InstanceRefreshes[0].{Id:InstanceRefreshId,Status:Status,PercentageComplete:PercentageComplete,InstancesToUpdate:InstancesToUpdate,StatusReason:StatusReason}'
{
"Id": "b032f361-cd52-43dc-a057-9a5c0749afa2",
"Status": "Successful",
"PercentageComplete": 100,
"InstancesToUpdate": 0,
"StatusReason": null
}
Status は Successful、PercentageComplete は 100、InstancesToUpdate は 0 となっていました。これにより、チェックポイント付きで開始した Instance Refresh が正常に完了し、Auto Scaling グループ内のインスタンスがすべて新しい起動テンプレートバージョンに置き換えられたことを確認できました。


まとめ
今回は、Amazon EC2 Auto Scaling の Instance Refresh Checkpoints を検証環境で試してみました。起動テンプレート v1 / v2 を用意し、Auto Scaling グループが参照する起動テンプレートバージョンを切り替えたうえで、チェックポイント付きのインスタンスの更新を実行しました。
実際に確認したところ、更新は 25 %、50 % と段階的に進み、最終的に Status: Successful、PercentageComplete: 100 となりました。これにより、チェックポイントを使った段階的なインスタンス更新が意図どおり動作することを確認できました。
段階的に更新を進めたい場合や、更新途中で動作確認を挟みたい場合には、Instance Refresh Checkpoints は有効な選択肢になりそうです。
本ブログが誰かの参考になれば幸いです。
参考資料
- インスタンスの更新にチェックポイントを追加する - Amazon EC2 Auto Scaling
- AWS マネジメントコンソール または を使用して を使用してチェックポイントを有効にする AWS CLI - Amazon EC2 Auto Scaling
- describe-instance-refreshes — AWS CLI 2.34.19 Command Reference
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました






