🔄 Auto Scaling インスタンスリフレッシュ

バス会社の車両更新で理解する!EC2の安全な一斉入れ替え完全ガイド

📌 結論:インスタンスリフレッシュとは?

インスタンスリフレッシュ = Auto Scaling グループ内のEC2を「安全に」「段階的に」新しいものに入れ替える機能

🚌 バス会社が古いバスを新型バスに計画的に置き換えるように、
サービスを止めずにEC2インスタンスを最新の設定に更新できます!

🔄
ローリング更新
一定割合ずつ
段階的に置き換え
サービス継続可能
🛡️
安全性確保
最小稼働率を維持
ヘルスチェック連携
自動ロールバック
柔軟な制御
チェックポイント
一時停止・再開
カスタム設定

🚌 バス会社の車両更新で完全理解!

Auto Scalingグループ = バス会社の車両フリート(車両群)

全国の路線で毎日運行するバス会社を想像してください。
古いバスを新型バスに入れ替えたい...でも運行を止めずに置き換えたい!
これがまさに「インスタンスリフレッシュ」の役割です 🎯

🚌 インスタンスリフレッシュ = 計画的な車両入れ替え
🔴 旧型バス(古いAMI)
🚌 🚌 🚌 🚌
➡️
🔄
➡️
🟢 新型バス(新しいAMI)
🚌 🚌 🚌 🚌

📋 AWS用語とバス会社の対応表

🏢

Auto Scaling グループ バス会社

複数のバス(インスタンス)を管理する組織全体

🚌

EC2インスタンス 各バス

実際に運行する個々の車両

📋

起動テンプレート 車両設計図

新しいバスをどう作るかの仕様書

📀

AMI(マシンイメージ) バスの型式

旧型から新型への変更ポイント

📊

MinHealthyPercentage 最低運行台数

「最低○台は常に運行」というルール

⏱️

InstanceWarmup 試運転期間

新車が本格稼働前に様子を見る時間

🚧

チェックポイント 中間点検

「○台置き換えたら一旦確認」

ロールバック 旧車両に戻す

問題発生時に旧型バスで運行再開

📊 インスタンスリフレッシュの流れ

1
📋
起動テンプレート更新
新しいAMIやインスタンス設定を指定
2
🚀
リフレッシュ開始
StartInstanceRefresh APIを実行
3
🔄
ローリング更新
設定割合ずつ段階的に置き換え
4
ヘルスチェック
新インスタンスの正常性を確認
5
🎉
完了
全インスタンスが新バージョンに

⚙️ 重要パラメータ徹底解説

📊
MinHealthyPercentage
更新中に維持すべき最小稼働率(0-100%)
この割合のインスタンスは常にHealthyな状態を維持します。
値が高いほど安全だが、更新に時間がかかります。
🚌 バス会社のたとえ
「90%」= 10台中9台は常に運行中!
同時に停止できるのは1台だけ。
お客様への影響を最小限に抑える設定
⏱️
InstanceWarmup
新インスタンスが本格稼働するまでの待機時間(秒)
この時間が経過するまでヘルスチェックをスキップ。
アプリケーションの起動時間を考慮して設定。
🚌 バス会社のたとえ
「300秒」= 新車は5分間試運転!
エンジン確認、計器チェック、テスト走行...
いきなり乗客を乗せずに慣らし運転
🎯
SkipMatching
既に最新設定のインスタンスをスキップするか
true:既に最新のものは置き換えない(時間短縮)
false:全インスタンスを強制的に置き換え
🚌 バス会社のたとえ
「true」= 既に新型のバスはそのまま!
古い型式のバスだけを入れ替える
無駄な作業を省いて効率化
🚧
CheckpointPercentages
一時停止するタイミングを指定(%の配列)
指定割合に達すると自動的に一時停止。
問題がないか確認してから続行できます。
🚌 バス会社のたとえ
「[20, 50, 100]」= 3段階確認!
2割・5割・全部で一旦ストップ
各段階で問題がないか点検してから次へ

🔄 ローリング更新の様子を図解!

MinHealthyPercentage = 75%(4台中3台は常に稼働)の場合

STEP 1
初期状態 → 1台目の更新開始
🚌
終了中
🚌
旧型
🚌
旧型
🚌
旧型

まず1台を終了して、新しいインスタンスを起動準備

STEP 2
新インスタンス起動中
🚌
起動中
🚌
旧型
🚌
旧型
🚌
旧型

新型バスが試運転中(InstanceWarmup期間)

STEP 3
1台完了 → 次の更新へ
🚌
新型✨
🚌
終了中
🚌
旧型
🚌
旧型

1台目完了!次の旧型バスを入れ替え開始

COMPLETE
全台更新完了!🎉
🚌
新型✨
🚌
新型✨
🚌
新型✨
🚌
新型✨

全車両が新型バスに!サービス中断なしで更新完了

旧型(古いAMI)
新型(新しいAMI)
終了中
起動中

🚧 チェックポイント機能で安全確保

更新の途中で一旦停止して確認できる!問題があればロールバック

🚀
20%完了
最初のチェックポイント
2台更新が終わった段階
➡️
🔍
状態確認
メトリクス・ログをチェック
問題がないか確認
➡️
📊
判断
続行?ロールバック?
を決定
⬇️ 問題なし
✅ 続行
「次のチェックポイントへ!」
⬇️ 問題あり
⏪ ロールバック
「旧バージョンに戻す!」

🚌 バス会社のたとえ:
「まず2台だけ新型に入れ替えて、乗客からクレームがないか確認」
「問題なければ残りも入れ替え、問題あれば旧型に戻す」

📊 更新方法の比較

比較項目 🔄 インスタンスリフレッシュ ✋ 手動置き換え 📈 容量変更
サービス継続 ✅ 自動で維持 ⚠️ 手動管理 ✅ 可能
作業の手間 ✅ 最小 ❌ 大きい ⚠️ 中程度
ロールバック ✅ 自動対応 ❌ 手動 ❌ 困難
進捗管理 ✅ 自動追跡 ❌ 手動 ⚠️ 限定的
チェックポイント ✅ 設定可能 ❌ なし ❌ なし
推奨ケース AMI更新・設定変更 特定インスタンス
のみ対象
一時的な
キャパシティ調整

💼 こんな時に使おう!

📀
AMIの更新
新しいパッチを適用したAMIに入れ替えたい時。セキュリティアップデートやOSバージョンアップに最適。
例:月次セキュリティパッチ適用後の新AMIに全インスタンスを更新
⚙️
インスタンスタイプ変更
より高性能なインスタンスタイプに移行したい時。起動テンプレートを更新してリフレッシュ。
例:t3.medium → t3.large へのスケールアップ
🔐
セキュリティ対応
重大な脆弱性が発見された時の緊急対応。パッチ適用済みAMIへの迅速な移行。
例:Log4j脆弱性対応で全インスタンスを緊急更新
📱
アプリケーション更新
ベイクドAMI方式でのアプリデプロイ。新しいアプリバージョンを含むAMIに更新。
例:新機能リリース時にアプリ入りAMIを段階展開
🔄
定期的なリフレッシュ
長期稼働によるメモリリークやディスク肥大化の解消。定期的な「新鮮な」インスタンスへの入れ替え。
例:毎週日曜深夜に全インスタンスをリフレッシュ
🌐
AZ分散の最適化
Availability Zone間でインスタンスを再配置。障害耐性の向上。
例:AZ障害復旧後にインスタンスを均等配置に戻す

💻 実践!AWS CLIコマンド

🚀 インスタンスリフレッシュを開始
# 基本的なインスタンスリフレッシュ開始 aws autoscaling start-instance-refresh \ --auto-scaling-group-name "my-asg" \ --preferences '{ "MinHealthyPercentage": 90, "InstanceWarmup": 300, "SkipMatching": true }' # チェックポイント付きでリフレッシュ開始 aws autoscaling start-instance-refresh \ --auto-scaling-group-name "my-asg" \ --preferences '{ "MinHealthyPercentage": 90, "InstanceWarmup": 300, "CheckpointPercentages": [20, 50, 100], "CheckpointDelay": 3600 }'
📊 進捗状況を確認
# リフレッシュの状態を確認 aws autoscaling describe-instance-refreshes \ --auto-scaling-group-name "my-asg" # 出力例 { "InstanceRefreshes": [{ "InstanceRefreshId": "abc123-def456", "AutoScalingGroupName": "my-asg", "Status": "InProgress", "PercentageComplete": 50, "InstancesToUpdate": 2 }] }
⏹️ リフレッシュをキャンセル
# 実行中のリフレッシュをキャンセル aws autoscaling cancel-instance-refresh \ --auto-scaling-group-name "my-asg"
💡 インスタンスリフレッシュ成功のコツ
1. MinHealthyPercentageは高めに設定:
本番環境では90%以上を推奨。サービスへの影響を最小限に。

2. InstanceWarmupは余裕を持って:
アプリケーションの起動時間 + ヘルスチェック間隔 + バッファ時間を考慮。

3. チェックポイントを活用:
大規模環境では20%、50%、80%など段階的に確認。問題の早期発見に有効。

4. 事前にテスト環境で検証:
本番適用前に、同じ設定でテスト環境でリフレッシュを実行して確認。

5. CloudWatchアラームと連携:
エラー率やレイテンシーの急増を検知してロールバックを判断。

6. メンテナンスウィンドウで実行:
トラフィックが少ない時間帯に実行すると影響を最小化できる。

❓ よくある質問

🤔 インスタンスリフレッシュ中にスケーリングは動作する?
はい、動作します!
リフレッシュ中もAuto Scalingのスケーリングポリシーは有効です。負荷に応じてインスタンス数は増減しますが、新しく起動するインスタンスは最新の起動テンプレート(新しいAMI)で作成されます。
🤔 リフレッシュ中に問題が発生したらどうなる?
自動的に一時停止し、必要に応じてロールバックできます。
新しいインスタンスがヘルスチェックに失敗した場合、リフレッシュは一時停止します。CheckpointPercentagesを設定していれば、各段階で確認して手動でキャンセル(ロールバック)することも可能です。
🤔 途中で一時停止してから再開できる?
はい、できます!
CheckpointPercentagesを設定すると、指定した割合で自動的に一時停止します。状態を確認後、ContinueInstanceRefresh APIまたはコンソールから再開できます。手動で一時停止したい場合はチェックポイントを利用してください。
🤔 ロードバランサーとの連携は?
自動的に連携します!
ELBターゲットグループに登録されているAuto Scalingグループの場合、古いインスタンスは適切にドレイン(接続排出)されてから終了し、新しいインスタンスはヘルスチェック合格後にトラフィックを受け付けます。
🤔 費用はかかる?
インスタンスリフレッシュ機能自体は無料です!
ただし、リフレッシュ中は一時的に新旧両方のインスタンスが存在するため、その期間のEC2費用は発生します。MinHealthyPercentageが高いほど同時稼働インスタンスが多くなる点に注意。

🎓 まとめ

🚌 バス会社の車両更新 = インスタンスリフレッシュ

お客様(トラフィック)を乗せたまま、
古いバス(旧AMI)から新型バス(新AMI)へ
安全に・段階的に入れ替える機能です!

📊
MinHealthyPercentage
最低稼働率
90%推奨
⏱️
InstanceWarmup
試運転時間
余裕を持って
🚧
チェックポイント
段階確認
安全性UP
ロールバック
問題時は
即座に戻す
🎯 インスタンスリフレッシュを使うべき場面:

📀 AMI更新(セキュリティパッチ、OSアップデート)
⚙️ インスタンスタイプ変更
🔐 セキュリティ緊急対応
📱 ベイクドAMIでのアプリデプロイ

サービスを止めずにインスタンスを一新!
これがインスタンスリフレッシュの力です 🚀

Created by SSuzuki1063

AWS SAP Learning Resources