EC2インスタンスを常時稼働させている場合、時々無応答になる現象が発生します。これを回避するために定期的にEC2インスタンスの自動再起動処理を実行しておくと便利ですね。今回はやり方のお話です。
・再起動には2種類ある
EC2インスタンスの再起動といっても、実は2種類の再起動が存在します。一つ目は単純にサーバを再起動するだけのもの、もう一つがインスタンスの停止と開始を実行するもの。
違いは、起動している親サーバが替わるかどうかです。言葉ではわかりづらいので、以下イメージ図をご参照ください。
・再起動のイメージ

サーバ①上でEC2インスタンスが稼働していたとして、OSの再起動を実行してもサーバ①上で起動してきます。
・インスタンスの停止、開始のイメージ

サーバ①上でEC2インスタンスが稼働していたとして、インスタンスの停止、開始を実行すると赤枠のサーバのいずれかで起動してきます。なので、サーバ②かもしれないしサーバ③かもしれません。
今回はインスタンスの停止、開始にてサーバを再起動する手順といたします。
・設定手順
今回はAWS上のサービスである「CloudWatch Events」だけで実行させます。
①起動・停止実行用の権限を作成する
「CloudWatch Events」がEC2を操作できるようにするための権限を、ここで作成します。
まずロールを作成します。IAMの左メニューより「ロール」を選択し、「ロールの作成」を選択します。
「AWSサービス」を選択し、下のユースケース一覧から「CloudWatch Events」を選択します。

「次のステップ:アクセス権限」を選択後、特に変更を加えず「次のステップ:タグ」を選択します。
タグの設定については、特に設定しなくてもよいですが分かり易い名前を付けておくと管理が楽になると思います。ここでは「name:Only TEST.」として追加しています。「次のステップ:確認」を選択します。

最後にロールの名前を決めて、「ロールの作成」を選択して完了です。

引き続き、作成したロールへポリシーを割り当てます。先ほど作成したロールを選択し、「ポリシーをアタッチします」を選択します。

ポリシーのフィルタに「ssm」と入力し、「AmazonSSMAutomationRole」を選択して「ポリシーのアタッチ」を選択で完了です。

②CloudWatch Eventsの設定
サービス検索より「CloudWatch」を検索しサービスを選択します。
※Amazon EventBridgeでも設定できますが、馴染みのあるCloudWatch Eventsにて設定します

左メニュ-の「ルール」を選択し、「ルールの作成」を選択します。

以下のように設定を実施して、「設定の詳細」を選択します。
・スケジュールにチェック
・Cron式にチェック:「0 0 * * ? *」と記述 ※時刻設定はGMTのため、毎朝9時に実行となる
・ターゲット:「SSM Automation」を選択
・ドキュメント:「AWS-StopEC2Instance」を選択
・定数にチェック:Instanceidに操作したインスタンスのIDを記述
・既存のロールを使用にチェック:先程作成したロールを選択

以下のように確認画面が表示されるので、ルールの名前を付けて「ルールを作成」を選択して完了です。
起動設定は以下項目以外は全く同じとしてルールを作成します。
・Cron:5 0 * * ? * ※停止後、5分後に起動
・ドキュメント:AWS-StartEC2Instance
あとは設定した時間にインスタンスが停止・起動していることを確認しましょう。
・まとめ
いかがだったでしょうか。AWS上のサービスのみで停止、起動を自動で実行できましたね。
一昔前はlambdaを駆使しなければできなかったのですが便利になりました。
注意ですが、必ず動作確認を実施しましょう。またいきなり本番環境で適用しないようにしましょう。
今回はこれにて終了です。最後まで読んでいただき、ありがとうございました。