Amazon EventBridge Schedule を用いた時間指定による Amazon CloudWatch アラームアクションを停止してみる

AWS

2022.12.16

Topics

EventBridge Scheduler について

EventBridge に Scheduler 機能が追加されました。
様々なAWSサービスのAPIを EventBridge Scheduler を用いて実行することが可能になりました。

Amazon EventBridge が新しいスケジューラを起動
>本日、Amazon EventBridge Scheduler をリリースできることを嬉しく思います。開発者がスケジュールされたタスクを大規模に簡単に作成、実行、管理できるようにすることで、現在のスケジューリング機能を拡張します。

Amazon EventBridge Launches New Scheduler

以前、Cold-Airflowさんの記事にて、EventBridge の Scheduler 機能を用いたEC2の定期停止について紹介されておりましたが、今回は CludWatch アラーム のアクション有効・無効の仕組みを、EventBridge の Scheduler 機能を用いて実装してみたいと思います。

関連記事
Amazon EC2 の定期停止が Amazon EventBridge Scheduler によってより簡単になりました!

CloudWatch アラームの運用上の課題

今までは、アラームを設定した機器のメンテナンスを実施する際、CloudWatch アラーム のアクションはAPIやCLI、コンソールにて無効にし、メンテナンスが終了後、アクションを有効にするというように、手動で有効・無効の作業を行う必要がありました。

また、決められたスケジュールで有効・無効を行う場合は、Lambda等のサービスを用いて行わなければならず、導入するハードルが高い印象がありました。

今回の EventBridge のアップデートで、一時的もしくは定期的にAPIを呼び出すことが可能になったことで、上記作業を全て EventBridgeで完結することが可能になりました。

やってみた

今回は既に設定済みの CloudWatch アラーム を利用し、アクションの有効・無効を実施したいと思います。
上記 EC2 ・ CloudWatch アラームの設定は割愛します。

IAMロールの作成

事前に EventBridge Scheduler で利用するIAMロールを作成します。
「CloudWatchFullAccess」に加え、以下の AssumeRole をアタッチします。
作成したIAMロールは、 EventBridge Scheduler を作成時に選択します。


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "scheduler.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

注意点は、Service名が EventBridge と EventBridge Scheduler で異なることです。
EventBridge は “events.amazonaws.com” 、EventBridge Scheduler は “scheduler.amazonaws.com” を選択しないと動作しないため、正しく選択しましょう。

スケジュールの作成

次にスケジュールの作成ですが、コンソールにて作成していきます。

「スケジュール名」や「説明」は任意の値を入力し、「スケジュールグループ」は「default」を選択します。
「頻度」については、今回は検証のため「1回切りのスケジュール」を選択します。

もちろん、「定期的なスケジュール」を選択することで、「cronベース」や「rateベース」のスケジュールを作成することが可能ですので、定期的にアラームを有効・無効にしたい場合に利用しましょう。

「日付と時刻」にAPIを実行する日時を入力し、「フレックスタイムウィンドウ」は「オフ」を選択したら「次へ」を選択します。

次に「ターゲット」を選択します。
アクションを無効にする場合は「DisableAlarmActions」を、有効にする場合は「EnableAlarmActions」を選択してください。今回はアクションを無効にするため「DisableAlarmActions」を選択します。

API を選択した状態でしたにスクロールすると、JSON 形式でアラーム名が指定可能です。
今回は、事前に準備した CloudWatch アラーム のアラーム名を入力します。

最後に、「アクセス許可」にて事前に作成したIAMロールを選択し、作成が完了です。
IAMロール以外はデフォルトのままとしていますが、「スケジュールの状態」や「再試行ポリシー」、「暗号化」等の選択も可能ですので、要件に併せて設定を変更してください。

あとは、指定した時間になったら CloudWatch アラーム のアクションが無効になっているかを確認します。

停止時間

指定した時間になったので、コンソールと CloudTrail で確認します。
まずはコンソールです。以下のように指定した CloudWatch アラーム のアクションが無効になっています。

次に CloudTrail ですが、下記の通り問題なく実行されたことが確認できます。


    "eventTime": "2022-12-13T09:17:29Z",
    "eventSource": "monitoring.amazonaws.com",
    "eventName": "DisableAlarmActions",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "54.150.111.13",
    "userAgent": "AmazonEventBridgeScheduler, aws-sdk-java/2.18.29 Linux/4.14.294-220.533.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.17+11-LTS Java/11.0.17 kotlin/1.3.72-release-468 (1.3.72) vendor/Amazon.com_Inc. md/internal exec-env/AWS_ECS_FARGATE io/async http/NettyNio cfg/retry-mode/legacy",
    "requestParameters": {
        "alarmNames": [
            "Monitoring-Test-Alarm"
        ]
    },

 

まとめ

今回は EventBridge Scheduler を用いて CludWatch アラーム のアクション有効・無効についてご紹介しました。
EventBridge Scheduler の登場により、 CloudWatch を今よりも運用しやすくなったかと思います。
もちろん、EventBridge Scheduler は EC2 や CloudWatch 以外にも様々なサービスのAPIを利用することが可能ですので、現在の運用を見直す切っ掛けにしてみてはいかがでしょうか。

 

mrnk

サーバサイドエンジニア。IaCやCI/CDに対し日々奮闘中。健康のためにジムに通いたいと思い続け3年が経過しました。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら