ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【EventBridgeスケジューラ+CloudWatch+SNS】EC2 停止スケジュールの失敗通知を構築する

この記事を共有する

目次

はじめに

本記事は「 【EventBridge】EC2 の停止をスケジュールする設定手順」 の内容を深掘りした記事です。
Amazon EC2 (以下、EC2) インスタンスを停止する Amazon EventBridge (以下、EventBridge) スケジューラのスケジュールについて、ターゲット「StopInstances」の呼び出しに失敗したときに通知メールを送信する構成を作ります。
なお、 スケジュールのターゲット呼び出しの失敗を検知する構成は、EC2 インスタンスの停止に限らず使用できます。

構成

構成概要

スケジュールのターゲット呼び出しの失敗は、Amazon CloudWatch (以下、CloudWatch) メトリクスを指標に判断し、通知を CloudWatch アラームから発報します。
EventBridge スケジューラメトリクスのディメンションは「ScheduleGroup」であり¹、スケジュール単位では出力されません
そのため、スケジュールグループメトリクスを監視することで、当該グループに含まれるスケジュールの失敗を判断します
スケジュールグループ単位の監視になるため、同一のグループに含まれるスケジュールは監視設計での検討が必要です。

メトリクス

監視するスケジュールグループメトリクスは「InvocationDroppedCount」を選択します。
このメトリクスは「スケジュールの再試行ポリシーが使い果たされた後に、EventBridge スケジューラがターゲットを呼び出す試みを停止したときに発生します。」¹
なお、再試行ポリシーをオフに設定していても、ターゲット呼び出しに失敗した場合は本メトリクスが発生しましたが、導入時はテストで挙動を確認してください

構成図

構成図は以下のとおりです。

手順

手順で記載する設定名称は、AWS マネジメントコンソールからの引用(参考文献参照)です。
言及のない設定値はデフォルトを使用しています。

1.スケジュールの設定

【EventBridge】EC2 の停止をスケジュールする設定手順」を参考にして、EventBridge スケジューラ経由で EC2 インスタンスを停止する設定をします。

2.「InvocationDroppedCount」の表示

該当スケジュールグループで一度もターゲットの呼び出しに失敗していない場合、メトリクス「InvocationDroppedCount」が表示されていない状態です。
スケジュールの実行を意図的に失敗させて、「InvocationDroppedCount」を表示します。

2-1.IAM ポリシーのデタッチ²

①「IAM >ロール」を開きます。
② スケジュールにアタッチした IAM ロールの詳細画面を開きます。
③「許可ポリシー」に表示されているポリシーにチェックをして、「削除」をクリックします。
④確認画面で「削除」をクリックします。

2-2.スケジュールの実行失敗³

①設定済みのスケジュールの定期実行を待つか、設定を編集して数分後に実行されるようスケジュールを変更します。
②「CloudWatch >メトリクス>すべてのメトリクス」を開き、「参照」タブから「Scheduler >スケジュールグループメトリクス」を開きます。
③以下画像³のとおり、該当スケジュールグループ名のメトリクス名「InvocationDroppedCount」が存在することを確認します。

3.SNS 設定

3-1.トピックの設定⁴

①「Amazon SNS >トピック」を開きます。
②「トピックの作成」をクリックします。
③「トピックの作成」画面で以下を入力して、「トピックの作成」をクリックします。

  • タイプ:スタンダード
  • 名前:任意の値

3-2.サブスクリプションの作成⁵

①作成したトピックの詳細画面にて、「サブスクリプションの作成」をクリックする。
②「サブスクリプションの作成」画面で以下を入力して、「サブスクリプションの作成」をクリックします。

  • トピック ARN:作成したトピックの ARN
  • プロトコル:E メール
  • エンドポイント:通知送信先のメールアドレス

③エンドポイントに設定したメールアドレスで確認メールを受信したら、メール本文内の「Confirm subscription」をクリックします。
④遷移先のブラウザで「Subscription confirmed!」の表示を確認します。

4.CloudWatch アラームの設定⁶

①「CloudWatch >アラーム>すべてのアラーム」を開きます。
②「アラームの作成」をクリックします。
③「メトリクスと条件の指定」画面で「メトリクスの選択」をクリックします。
④「メトリクスの選択」画面で、「参照」タブから「Scheduler >スケジュールグループメトリクス」を開きます。
⑤該当スケジュールグループ名のメトリクス名「InvocationDroppedCount」にチェックを入れて、「メトリクスの選択」をクリックします。
⑥「メトリクスと条件の指定」画面で以下を入力して、「次へ」をクリックします。

  • メトリクス名:自動入力
  • ScheduleGroup:自動入力
  • 統計:合計値
  • 期間:1 分
  • しきい値の種類:静的
  • アラーム条件を定義します:以上
  • しきい値を定義します:1

⑦「アクションの設定」画面で以下を入力して、「次へ」をクリックします。

  • アラーム状態トリガー:アラーム状態
  • 次の SNS トピックに通知を送信:既存の SNS トピックを選択
  • 通知の送信先:「3-1.トピックの設定⁴」で作成した SNS トピック

⑧「アラームの詳細の追加」画面で以下を入力して、「次へ」をクリックします。

  • アラーム名:任意の値
  • アラームの説明:任意の内容

「アラームの説明」は通知メールの本文に含まれるため、アラームの対象や目的を記載すると運用上の利便性が向上します。日本語の記載が可能です。

⑨「プレビューと作成」画面で、内容を確認して「アラームの作成」をクリックします。

5.失敗検知の挙動確認

スケジュールの実行を意図的に失敗させて、通知メールを受信することを確認します。

①設定済みのスケジュールの定期実行を待つか、設定を編集して数分後に実行されるようスケジュールを変更します。
②エンドポイントに設定したメールアドレスに通知メールを受信することを確認します。(スケジュールの実行からメール受信まで、数分程度かかります)

6.運用設定に修正

本記事の手順で変更した設定を、運用で使用する設定に戻します。

6-1.IAM ポリシーのアタッチ²

①「IAM >ロール」を開きます。
②スケジュールにアタッチした IAM ロールの詳細画面を開きます。
③「許可ポリシー」の「許可を追加>ポリシーをアタッチ」をクリックします。
④「2-1.IAM ポリシーのデタッチ²」でデタッチした IAM ポリシーを選択して、「許可を追加」をクリックします。

6-2.スケジュールの正常実行確認

①ターゲットの EC2 インスタンスが停止している場合、起動します。
②設定済みのスケジュールの定期実行を待つか、設定を編集して数分後に実行されるようスケジュールを変更します。
③設定時刻後に、ターゲットの EC2 インスタンスが「停止済み」になっていること、及び通知メールが送信されないことを確認します。
④本記事の手順のためにスケジュールの定期実行設定を変更した場合は、運用で使用する設定に修正します。

補足

例えば EC2 インスタンスが「停止中」にスケジュールで「StopInstances」を呼び出した場合、エラーと判断されてメトリクス「InvocationDroppedCount」は発生するのでしょうか。

検証の結果、呼び出しの試行を示す¹「InvocationAttemptCount」は発生した一方で、「InvocationDroppedCount」は発生しませんでした。
「InvocationDroppedCount」は、ターゲット呼び出しに失敗して再試行ポリシーを使い果たしたときに発生するため、「StopInstances」の呼び出し自体は成功した扱いになったようです。

他のターゲットでは挙動が異なる可能性があるため、想定されるパターンごとにテストを実施して挙動を確認してください

まとめ

本記事では、EC2 インスタンスを停止する EventBridge スケジューラのスケジュールについて、ターゲット「StopInstances」の呼び出しに失敗したときに通知メールを送信する構成を作りました。
ポイントは、スケジュールグループメトリクス「InvocationDroppedCount」を CloudWatch アラームで監視して発報することです。
この構成は EC2 インスタンスの停止に限らず使用できます。

本記事が少しでもお役に立てれば幸いです。

参考文献

¹ "Amazon CloudWatch による Amazon EventBridge スケジューラのモニタリング - EventBridge スケジューラ". Amazon Web Services. https://docs.aws.amazon.com/ja_jp/scheduler/latest/UserGuide/monitoring-cloudwatch.html, (参照 2025-12-21)
² "ロール | IAM | Global". Amazon Web Services. https://us-east-1.console.aws.amazon.com/iam/home?region=ap-northeast-3#/roles, (参照 2025-12-21)
³ "メトリクス | CloudWatch | ap-northeast-3". Amazon Web Services. https://ap-northeast-3.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-3#metricsV2?graph=~(), (参照 2025-12-21)
⁴ "トピック | Simple Notification Service | ap-northeast-3". Amazon Web Services. https://ap-northeast-3.console.aws.amazon.com/sns/v3/home?region=ap-northeast-3#/topics, (参照 2025-12-21)
⁵ "サブスクリプション | Simple Notification Service | ap-northeast-3". Amazon Web Services. https://ap-northeast-3.console.aws.amazon.com/sns/v3/home?region=ap-northeast-3#/create-subscription, (参照 2025-12-21)
⁶ "アラーム | CloudWatch | ap-northeast-3". Amazon Web Services. https://ap-northeast-3.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-3#alarmsV2:, (参照 2025-12-21)

この記事は私が書きました

Hirano

記事一覧

AWSの知見を身につけるため、一大決心でP&Sに入社しました。 目標はシステム改善に大きく貢献できるエンジニアになることです。 簡単な内容であっても自身が戸惑った点を投稿することで、同じ苦労をしている方の助けになれば嬉しいです!

Hirano

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。