Amazon EventBridge入門 PagerDuty連携を試してみた

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな吉井 亮です。

アメリカ時間 2019年7月11日に Amazon EventBridge が発表されました。

最も注目する機能は、SaaS アプリケーションからのデータ接続だと勝手に思っています。
感触をつかむために試してみました。

ユースケース

Amazon EventBridge にユースケースが記載されています。

  • Zendesk チケットのステータスの変更を EventBridge に送信して自動化されたワークフローをトリガーする
  • Zendesk チケットのステータスの変更から、機械学習を使って感情分析モデルのトレーニングやデプロイを行う
  • Whispir コミュニケーションワークフローに脅威検出イベントを含める
  • イベントベースのルールを使ってセキュリティシステムレポートの配信を自動化する
  • PagerDuty インシデントを Amazon Redshift データウェアハウスに接続し、エンジニアリングチームで修復速度や平均的なオペレーション負荷を分析
  • DataDog から EventBridge に負荷ボリュームのアラートを送信し、予想される負荷の増大に対応できるよう EC2 インスタンスをスケーリングする AWS Lambda 関数をトリガー
  • OneLogin から EventBridge に新規ユーザー作成イベントを送信し、新規採用のエンジニアが技術リソースを利用できるようにする
  • SugarCRM オポチュニティのステータスが「Closed Won」に変更されたら EventBridge にイベントを送信し、会計システムで請求レコードをプロビジョニングするワークフローをトリガー

まだ開始したばかりのサービスで統合されている SaaS は多いとは言えませんが
今後拡張していけば色々なことが出来そうな期待をもてるサービスのように思えます。

試す

今回は、リアルタイム IT 運用向けプラットフォームの PagerDuty との連携を試してみます。

PagerDuty アカウント

PagerDuty アカウントをご用意ください。
アカウント取得手順は割愛します。

PagerDuty CloudWatch Integration

事前準備として PagerDuty 側の CloudWatch Integration を設定します。
手順は 公式ドキュメント を参照ください。
上のドキュメントにある In Pagerduty の全てと In the AWS Management Console の 5 までの作業を行います。

PagerDuty EventBridge Integration

事前準備として PagerDuty 側の EventBridge Integration を設定します。
手順は 公式ドキュメント を参照ください。
上のドキュメントにある In Pagerduty の作業を行います。
In the AWS Management Console の作業はまだ行いません。

Lambda 関数の作成

PagerDuty から送られてくるイベントを受ける関数を作成します。
今回は特別な処理は入れずにメッセージを表示するだけの関数です。

python3.7 で以下の関数を作成しました。

import json

def lambda_handler(event, context):
    message = json.loads(event['Records'])
    print(message)

パートナーイベントソースの作成

EventBridge の出番です。
パートナーイベントソース を開きます。
ステータスが保留になっている行が表示されています。
イベントバスと関連付ける をクリックします。

イベントバスと関連付ける

関連付ける をクリックします。

ルールの作成

イベントバスが作成できたら ルールを作成 をクリックします。

名前と説明

識別しやすい名前と説明を入力します。

パターンを定義

下図の通り イベントパターン を選択します。
次に カスタムパターン を選択し、イベントパターン欄に以下を入力します。

{
    "detail-type":[
        "PagerDuty Webhook"
    ]
}

イベントバスを選択

前の手順で作成した PagerDuty のイベントバスを選択します。

ターゲットを選択

前の手順で作成した Lambda 関数を指定します。

テスト

ルール作成

今回は EC2 インスタンスの停止を PagerDuty に連携します。
停止イベントを拾うために CloudWatch Events ・・・ではなくて EventBridge ルール を開きます。

イベントバスdefault を選び、ルールを作成 をクリックします。

パターンを定義

下図のように入力します。

ターゲットを選択

手順「PagerDuty CloudWatch Integration」で作成した SNS トピックを選択します。

EC2 停止

EC2 インスタンスを停止します。(終了ではなく停止)
停止できるインスタンスが無い場合は小さいインスタンスを作ってみてください。

PagerDuty で確認

EC2 の停止がインシデントとして報告されています。

CloudWatch Logs で確認

手順「Lambda 関数の作成」で作成した関数のログを表示してみます。
インシデントがトリガーされたという PagerDuty のイベントが AWS に返ってきていることが判ります。

PagerDuty からのイベント

PagerDuty から飛んでくるイベントは以下に記載があります。
Amazon EventBridge Integration Guide

まとめ

私自身 EventBridge を使った SaaS 統合における有効的なユースケースを模索しているところです。
イベントが PagerDuty から AWS へ返ってくるまでの検証しか出来ておりません。

ただ、返ってくるイベントの内容が理解できれば、あとは書くだけだと思っています。(ユースケースが浮かべば)
例えば、PagerDuty で Acknowledge したら担当者に一時的な認証を割り当てる、といった使い方も可能だと思います。

オペレーションの自動化・効率化・見える化を実現するためのパワフルなツールだと感じています。

参考

Amazon EventBridge
User Guide
Amazon EventBridge – Event-Driven AWS Integration for your SaaS Applications
Amazon EventBridge Integration Guide | PagerDuty

以上、吉井 亮 がお届けしました。