イベントパターンを設定するときに便利な「test-event-pattern」というコマンド

2020.12.29

はじめに

こんにちは。大阪オフィスの林です。

Amazon EventBridgeを使用してAWS のサービス、独自のアプリケーション、またはSaaSアプリケーションのイベントをコントロールしているケースは多くあるかと思います。Amazon EventBridgeではソースのイベントに対して「イベントルール」を設定することで、意図したイベントのみをフィルタリングし、そのイベントが発生した時のみ、AWS Lambda、Amazon SNS、Amazon Kinesis Data Firehose といった数々の AWS のサービスに連携することもできます。今回は「イベントルール」で指定する「イベントパターン」を設定するときに便利なコマンドを1つご紹介したいと思います。

test-event-pattern コマンド

イベントパターンの設定が正しいかどうかは、実際にイベントを発行して後続の処理が動くかどうかでしか判断できないと思っていました。しかしtest-event-patternという便利なコマンドがあったので使い方をご紹介したいと思います。

コマンドの使用方法

コマンドリファレンスはこちらから。
使い方は至ってシンプルでaws events test-event-patternというコマンドを使って、引数に「設定するイベントパターン」と「サンプルのイベント」を記述するだけで実行できます。サンプルのイベントがイベントパターンにマッチしていればture、マッチしていなければfalseでコマンドの実行結果として返ってきます。

aws events test-event-pattern \
--event-pattern "設定するイベントパターン" \
--event "イベント"
{
    "Result": true or false
}

どんな時に便利なのか?

例えばGuardDutyなんかはダッシュボードからサンプルイベントを生成することができるのですが、Severityについては「整数」のイベントしか生成されないので、小数点を含むSeverityのイベントが記録された時に本当にイベントパターンの条件に応じてフィルタリングされるのかどうかなどtest-event-patternを使用することで結果が一目瞭然となります。しかもGuardDutyではダッシュボードからサンプルイベントを生成すると70件近いイベントが発行され、その分、後続のサービスも起動してしまうため、実行回数や実行数に応じた課金体系のサービスを後続に置いている場合は、少なからずコストへの影響も出てきます。しかしtest-event-patternで設定内容をチューニングすることで設計時のコスト面も幾分か緩和されたりします。あとは実際のイベントをそもそも発行しにくいサービスなんかはtest-event-patternを使うことでイベントパターンの設定内容を精査するハードルが少し下がるのではないでしょうか。

実際にコマンドを使ってみる

それでは、実際にコマンドを使ってみたいと思います。
下記コマンドは、GuardDutyのイベントでSeverityが4以上というイベントパターンを指定しており、サンプルイベントにSeverityを8.1を指定しています。実行結果は期待した通り、イベントにマッチしているのでtrueが返ってきています。

aws events test-event-pattern\
--event-pattern "{\"detail-type\":[\"GuardDuty Finding\"],\"source\":[\"aws.guardduty\"],\"detail\":{\"severity\":[{\"numeric\":[\">=\",4]}]}}" \
--event "{\"id\":\"1\",\"source\":\"aws.guardduty\",\"detail-type\":\"GuardDuty Finding\",\"account\":\"xxxxx\",\"region\":\"ap-northeast-1\",\"time\":\"2020-12-01T00:00:00Z\",\"detail\":{\"severity\":8.1}}"
{
    "Result": true
}

次に、サンプルイベントのSeverityを2.1にした場合、イベントパターンにマッチしないイベントになるため結果がfalseで返ってきています。

aws events test-event-pattern\
--event-pattern "{\"detail-type\":[\"GuardDuty Finding\"],\"source\":[\"aws.guardduty\"],\"detail\":{\"severity\":[{\"numeric\":[\">=\",4]}]}}" \
--event "{\"id\":\"1\",\"source\":\"aws.guardduty\",\"detail-type\":\"GuardDuty Finding\",\"account\":\"xxxxx\",\"region\":\"ap-northeast-1\",\"time\":\"2020-12-01T00:00:00Z\",\"detail\":{\"severity\":2.1}}"
{
    "Result": false
}

まとめ

イベントパターンを精査する際に、都度イベントを発生させるのが手間と感じていたのでaws events test-event-patternというコマンドは非常に助かりました。どなたかの参考になりましたら幸いです。

以上、大阪オフィスの林がお送りしました!