Amazon EC2のイベントウィンドウを設定してみる

# 概要

2021年7月15日に、Amazon EC2のカスタムイベントウィンドウがサポートされました。この設定を日本語マネージメントコンソールで、ステップバイステップで実施し参考手順としてまとめました。

# 詳細

## イベントウィンドウとは

AWSでは、AWS側の基盤メンテナンスなどによって、EC2インスタンスに「[予定されたイベント](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)」が発生することがあります。[イベントの種類](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html#types-of-scheduled-events)には、インスタンスの停止、リタイア、再起動などがあります。予定されたイベントは事前に通知され、内容によっては事前に実施しておいたり、期限日までの範囲で都合のよい日時を指定してのリスケジュールができることがあります。

2021年7月15日のアップデートで、EC2はカスタムイベントウィンドウ（イベントを許容できる時間枠）をサポートしました。

> この機能を利用して、顧客の好みに基づいてスケジュールされたイベントの時間枠をカスタマイズできます。お客様は、EC2コンソール、API、またはCLIを介してインスタンスIDまたはタグを使用して、イベントウィンドウをEC2インスタンスに関連付けることができます。スケジュールされたイベントがインスタンスに対して計画されている場合、AWSは関連するイベントウィンドウ内でこれらのイベントをスケジュールします。計画外のメンテナンスおよび迅速なスケジュールされたイベントは、スケジュールされたイベントウィンドウの範囲外になる可能性があります。
> （[Amazon EC2 now supports custom time windows for Scheduled Events](https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-ec2-supports-custom-time-windows-scheduled-events/)）

AWSが「予定されたイベント」をスケジュールする際に、イベントウィンドウが作成されており対象EC2インスタンスに適用されていれば、できる限りこのイベントウィンドウに最初からスケジュールされるようです。イベント通知に対応して作業発生することが減り、万が一通知を見落としたときのリスクも減りそうです。

なお、ドキュメントおよびイベントウィンドウ作成画面の注記によれば…

> イベントウィンドウは、インスタンスを停止、再起動、または終了する、緊急ではないスケジュールされたイベントにのみ適用されます。自動復旧とスケジュールされていない再起動は、引き続きイベントウィンドウの対象外です。

…とのことです。

## イベントウィンドウを設定してみる

ドキュメント「[Define event windows for scheduled events](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/event-windows.html)」を見ながら、日本語のAWSマネージメントコンソール（WebブラウザUI）でイベントウィンドウを設定してみます。ここでは `MondayDawn` という名前で、月曜日朝2時～6時を指定します。ただし指定はUTCで行うので、画面指定上は日曜日17～21時になります。

1. [AmazonEC2コンソール](https://console.aws.amazon.com/ec2/)を開きます。
2. ナビゲーションペインで、[イベント]を選択します 。
3. [アクション]、[イベントウィンドウの管理]の順に選択します。  
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/f8c19ee4-8149-f3bf-575a-657cb2d39d8d.png)
4. 「イベントウィンドウ」が表示されます。  
  [インスタンスイベントウィンドウを作成]を選択します。  
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/a78dfc5b-db77-9173-809c-685e7fad3d02.png)
5. 「イベントウィンドウを作成」が表示されます。
  まずイベントウィンドウ名に任意の名前を入力します。ここでは月曜日明け方にするので `MondayDawn` にしています。  
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/a631f1c1-ca02-8a31-e43f-8387f28cb1a2.png)
6. イベントウィンドウのスケジュールに、スケジュールされたイベントの実施を許容する時間範囲かCron式を指定します。個々の時間範囲は2時間以上、全部合計して4時間以上であることが必要です。  
  ここでは日本時間で月曜日2～6時に相当する日曜日17～21時を指定しています。  
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/0ef6e55a-2de0-54e6-c925-d0bdd3be05ab.png)
7. ターゲットの詳細で、このイベントウィンドウの適用対象を指定します。対象はEC2インスタンスに付与されたタグ、インスタンスID、デディケーティッドホストのホストIDのいずれかで指定できます。  
  ここでは「EventWindows:MondayDawn」タグを指定します。  
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/2df85fd7-ab4b-6344-895b-7614da10072c.png)
8. 必要に応じてイベントウィンドウ事態にタグを付けます。
9. [イベントウィンドウを作成]を選択します。  
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/6bc82627-1ada-c13a-cd47-9c87f3e67d5a.png)
10. イベントウィンドウが作成されました。「説明」タグでイベントウィンドウの名前や時間帯、「ターゲット」タブでターゲット指定内容を確認できます。  
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/8250450a-014e-67a5-8940-289a34a26e86.png)

ドキュメントはまだ英語のみですが、やってみればこんな感じで簡単でした。

なお手順7.でターゲットにインスタンスIDやホストIDを指定した場合は既にこのイベントウィンドウが適用される構成になっています。ここでの例のようにEC2インスタンスタグを指定した場合、このあとでEC2インスタンスにこのタグをつけていくことになります。2ステップに分かれて煩雑なようですが、今後EC2インスタンスを追加する際もインスタンスにタグを付与するだけでこのイベントウィンドウが適用されるはずで、効率的に管理できそうです。

イベントウィンドウを作成すればAWS側都合によるインスタンス停止等をすべて避けられるというわけではありませんが、設定は大した手間ではなかったので、設定しておいて損はなさそうです。

# 参考

* [Amazon EC2 now supports custom time windows for Scheduled Events](https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-ec2-supports-custom-time-windows-scheduled-events/)
* [Define event windows for scheduled events - Amazon Elastic Compute Cloud](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/event-windows.html)