【新機能】CloudWatchのアクションにEC2インスタンスの再起動が追加されました!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、虎塚です。

AWSの新機能アップデートで、CloudWatchのアラート時アクションにリブートが追加されました。

概要

CloudWatchは、AWSサービスを監視するためのサービスです。あらかじめ閾値を設定することで、アラームが上がった時にメール通知やEC2の自動操作がおこなわれるように設定できます。

CloudWatchでアラームが上がった時のアクションとして、これまでインスタンス操作として設定できるのは、次の3種類でした。

  • Stop
  • Terminate
  • Recover (Stop & Start)

Recoverは、インスタンスのStop/Startを意味します。詳細は、「【新機能】EC2 Cloudwatchの新機能「Auto Recovery」を使ってみた | Developers.IO」を参照ください。

今回の更新で、上記に加えてOSレベルでのRebootができるようになりました(インスタンスのStop/Startではないことに注意してください)。

OSがReboot(再起動)しても、EC2インスタンスが稼働する物理ホストは同一のままです。つまり、インスタンスの次の要素は、再起動の前後で維持されます。

  • インスタンスのパブリックDNS名
  • プライベートIPアドレス
  • インスタンスストアボリューム内のデータ

実験

ひとまず、本機能が動くことを確認しました。

1. アラーム作成

EC2インスタンスを1台起動して、CPU使用率を監視するアラームを作成します。

アラームの作成画面で、[EC2 Actions]ボタンをクリックします。

EC2 Actionボタンをクリック

[Reboot this instance]ラジオボタンを選択します。

Reboot this instanceラジオボタンを選択

初めてインスタンスアクションを設定しようとしたタイミングで、IAM Roleの追加を要求されます。このIAM Roleは、AWSがインスタンスにアクションする権限を定義したものです。次のポリシーを持つIAM Roleの追加を要求されます。ナビゲーションにしたがって作成しましょう。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:Describe*",
        "ec2:Describe*",
        "ec2:RebootInstances",
        "ec2:StopInstances",
        "ec2:TerminateInstances"
      ],
      "Resource": "*"
    }
  ]
}

今回の実験では、すぐに結果を得るために、アラームの設定を次のようにしました。

  • インスタンスの詳細モニタリングON -- これで、1分ごとに結果を得られます
  • 5分の間に、CPU使用率の最大値が80%に1度なれば、アラーム状態とする

2. CPUを回す

インスタンスのCPU使用率が80%を超えるように、インスタンス内で操作します。インスタンスにログインして、次のコマンドを実行しました。

$ yes > /dev/null

3. アラーム発生とリブートを確認する

数分してからManagement Consoleを確認すると、アラームが上がっています。

アラーム状態のインスタンス

CloudWatchコンソールでアラームの[History]タブを表示すると、再起動が記録されていました。

アラームの履歴

今回は、OK状態からALARM状態に遷移してから、リブートの完了までに、1分もかかりませんでした。なお、このアラームでは「5分間あたりの最大値」を見ているので、次の5分に入った後にALARM状態がOK状態に戻っています。

無事に自動リブートされました!

おわりに

便利な使い方は、これから検討していきたいと思います。インスタンス内部の状態が悪くなったらとりあえず再起動、といったことを手作業で実施している場面では、役に立つ機能ではないでしょうか。

それでは、また。