🔄 EC2 Auto Recovery

CloudWatch Alarmで実現する自動復旧の完全ガイド

🏥 Auto Recoveryとは?

マンションの「自動修理サービス」のようなもの!

建物に問題が起きたら、自動的に健全な建物に引っ越して、
すべてのデータと設定をそのまま引き継いでくれる魔法のようなサービスです✨

しかも、 あなたは何もする必要がありません!

⚙️ Auto Recoveryの動作フロー

1
🔍
問題を検知
CloudWatchが1分ごとにSystem Status Checkを監視。物理ホストの障害を発見!
2
🚨
アラーム発動
設定した閾値(例:2分間連続で失敗)に達したら、CloudWatch Alarmが発火
3
🔄
自動復旧開始
AWSが自動的にインスタンスを停止し、健全な物理ホストに移動を開始
4
🚚
データ保持
EBSボリューム、プライベートIP、Elastic IP、メタデータなど全て保持
5
新しいホストで起動
健全な物理ホストでインスタンスが自動的に起動。設定はそのまま!
6
復旧完了
サービスが自動的に再開。通知が届き、復旧完了を確認できる
⏱️ 復旧時間の目安:約5〜15分
手動で対応するより圧倒的に速い!

🆚 手動対応 vs Auto Recovery

👨‍💻

手動対応

従来の方法

対応時間
障害検知から復旧まで30分〜数時間
🌙
夜間・休日
担当者が対応できるまで待機
😰
人的リスク
操作ミスや手順忘れの可能性
📧
通知
アラート受信→確認→対応判断→作業
💸
コスト
24時間365日の待機体制が必要
🤖

Auto Recovery

自動化された方法

対応時間
検知から復旧まで5〜15分で自動完了
🌟
24/7対応
いつでも自動的に対応、人手不要
🎯
確実性
常に同じ手順で確実に復旧
通知
復旧完了の通知を受け取るだけ
💰
コスト
追加料金なし(CloudWatchの基本料金のみ)

⚙️ Auto Recoveryの設定方法

AWS Management Consoleでの設定

📍 Step 1: CloudWatchコンソールを開く

  1. CloudWatchコンソールにアクセス
  2. 左メニューから「アラーム」を選択
  3. 「アラームの作成」をクリック

📍 Step 2: メトリクスを選択

  1. 「メトリクスの選択」をクリック
  2. 「EC2」→「Per-Instance Metrics」を選択
  3. 対象のインスタンスIDで「StatusCheckFailed_System」を選択

📍 Step 3: 条件を設定

  • 統計: Maximum
  • 期間: 1分
  • しきい値: >= 1(1以上で障害とみなす)
  • データポイント: 2 / 2(2回連続で確認)

📍 Step 4: アクションを設定

  • 「アクション」セクションで「EC2アクション」を選択
  • 「このインスタンスを復旧」を選択
  • (オプション)SNS通知を設定して、復旧時にメール通知

📍 Step 5: 名前をつけて作成

  • わかりやすい名前をつける(例: "Production-Web-AutoRecover")
  • 「アラームの作成」をクリック
  • 完了!

AWS CLIでの設定

コマンド一発で設定完了!

# Auto Recoveryアラームを作成
aws cloudwatch put-metric-alarm \
  --alarm-name "AutoRecover-i-1234567890abcdef0" \
  --alarm-description "Auto recover instance on system status check failure" \
  --namespace "AWS/EC2" \
  --metric-name "StatusCheckFailed_System" \
  --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
  --statistic Maximum \
  --period 60 \
  --evaluation-periods 2 \
  --threshold 1 \
  --comparison-operator GreaterThanOrEqualToThreshold \
  --alarm-actions arn:aws:automate:ap-northeast-1:ec2:recover

# SNS通知も追加する場合
aws cloudwatch put-metric-alarm \
  --alarm-name "AutoRecover-with-SNS-i-1234567890abcdef0" \
  --alarm-description "Auto recover with notification" \
  --namespace "AWS/EC2" \
  --metric-name "StatusCheckFailed_System" \
  --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
  --statistic Maximum \
  --period 60 \
  --evaluation-periods 2 \
  --threshold 1 \
  --comparison-operator GreaterThanOrEqualToThreshold \
  --alarm-actions \
    arn:aws:automate:ap-northeast-1:ec2:recover \
    arn:aws:sns:ap-northeast-1:123456789012:MyTopic
💡 ポイント:
evaluation-periods を2にすることで、一時的な問題での誤検知を防ぐ
• リージョンに応じて ap-northeast-1 を変更する

CloudFormationテンプレート

インフラをコード化して管理!

AWSTemplateFormatVersion: '2010-09-09'
Description: 'EC2 instance with Auto Recovery'

Resources:
  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0abcdef1234567890
      InstanceType: t3.medium
      Tags:
        - Key: Name
          Value: AutoRecovery-Instance

  RecoveryAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: !Sub '${MyEC2Instance}-AutoRecover'
      AlarmDescription: 'Trigger auto recovery on system status check failure'
      Namespace: 'AWS/EC2'
      MetricName: 'StatusCheckFailed_System'
      Dimensions:
        - Name: InstanceId
          Value: !Ref MyEC2Instance
      Statistic: Maximum
      Period: 60
      EvaluationPeriods: 2
      Threshold: 1
      ComparisonOperator: GreaterThanOrEqualToThreshold
      AlarmActions:
        - !Sub 'arn:aws:automate:${AWS::Region}:ec2:recover'
        - !Ref MySNSTopic  # オプション: 通知用

  MySNSTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: EC2-Recovery-Notifications
      Subscription:
        - Endpoint: your-email@example.com
          Protocol: email

Outputs:
  InstanceId:
    Value: !Ref MyEC2Instance
  AlarmName:
    Value: !Ref RecoveryAlarm

⚠️ Auto Recoveryの制限事項

使えないケースがあるので要注意!

💾 Instance Store非対応

Instance Store(エフェメラルストレージ)を使用しているインスタンスは対象外

理由: Instance Storeのデータは物理ホスト移動時に消失するため

🚫 一部インスタンスタイプ

メタルインスタンス(*.metal)やスポットインスタンスは非対応

対応: t3, t2, m5, c5, r5などの一般的なタイプは使用可能

🌐 VPC内限定

EC2-Classic環境では使用できない(ほとんどのユーザーは問題なし)

対応: VPCを使用していれば問題なし

📍 専有テナンシー

Dedicated Host上のインスタンスは非対応

対応: デフォルトまたはDedicated Instanceなら使用可能

⏸️ 停止中は無効

停止中のインスタンスは監視されない

対応: 稼働中のインスタンスのみ有効

🔀 リージョン内のみ

別リージョンへの移動はできない

対応: 同一リージョン内の別AZ内物理ホストに移動

✨ Auto Recoveryのメリット

🚀

高速復旧

5〜15分で自動復旧。手動対応の1/4以下の時間

💰

追加費用なし

CloudWatchの基本料金のみ。復旧アクション自体は無料

🌙

24/7対応

深夜・休日でも自動対応。オンコール不要

💾

データ保持

EBSボリューム、IP、設定など全て保持

🎯

確実性

人的ミスなし。毎回同じ手順で確実に復旧

📊

可視化

CloudWatchで復旧履歴を確認・分析可能

📊 監視ダッシュボード例

EC2インスタンスの状態

System Status Check
Passing
Instance Status Check
Passing
Auto Recovery Alarm
OK
Last Recovery
Never (正常稼働中)
Uptime
45 days 12 hours

💡 ベストプラクティス

📧

SNS通知を必ず設定

Auto Recoveryが発動したことを知るために、SNSトピックを設定してメール・SMS通知を受け取りましょう。復旧が成功したか確認できます。

🔄

定期的なテスト

年に1-2回、テスト環境でStop→Startを実行し、復旧手順が正しく動作することを確認しましょう。本番環境での動作も安心です。

💾

EBSボリュームを使用

Instance Storeは復旧時にデータが消失します。必ずEBSボリュームを使用し、定期的なスナップショットも取得しましょう。

🎯

重要なインスタンスから設定

すべてのインスタンスに設定するのが理想ですが、まずは本番環境の重要なインスタンスから優先的に設定しましょう。

📊

CloudWatch Dashboardで可視化

すべてのインスタンスのステータスチェックを一つのダッシュボードで監視できるようにしましょう。問題の早期発見につながります。

🔐

Elastic IPを使用

固定IPが必要な場合はElastic IPを割り当てましょう。復旧後も同じIPアドレスが維持されます。

📝

タグで管理

インスタンスに「AutoRecovery: Enabled」などのタグをつけて、どのインスタンスが保護されているか一目でわかるようにしましょう。

⚠️

Instance Status Check失敗にも対応

System Status CheckだけでなくInstance Status Check失敗時の対応(自動再起動など)も設定して、両方のケースに備えましょう。

🎓 まとめ

🔄 Auto Recoveryとは

物理ホスト障害を 自動検知 して、
5〜15分 で健全なホストに自動移動!
データと設定は すべて保持 されます✨

高速
5〜15分で復旧
💰
無料
追加費用なし
🤖
自動
24/7対応

🎯 今すぐ設定しましょう!
障害が起きてから後悔するより、
今のうちにAuto Recoveryを有効化して安心運用✨

Created by SSuzuki1063

AWS SAP Learning Resources