EventBridge -> Service Integration (Custom Event Transformer)
"Amazon CloudWatch Integration" は Metric Alarm 専用で、EventBridge には対応していません。
Service Integration で受け付ける方法は二通りあります。 2パターン目として Custom Event Transformer を使用します。
Custom Event Transformer Integration Guide | PagerDuty
受信したイベントを JavaScript により変換する機能です。 機能詳細については以下のドキュメント内に記載があります。
- PagerDuty DEVELOPER PLATFORM
- Custom Change Event Transformer
Amazon EventBridge Integration について
Amazon EventBridge Integration Guide | PagerDuty
EventBridge のインテグレーションは PagerDuty -> EventBridge の連携用です。
EventBridge -> PagerDuty の方向では使用できません。
導入
PagerDuty Service に "Custom Event Transformer" インテグレーションを追加し、Integration URL を取得します。
AWS SNS の Subscription に Integration URL を HTTPS Endpoint として指定します。
インテグレーションが初期状態(スクリプト未編集)の場合、"Custom Event Transform" の件名でインシデントが作成されるので、confirm を実施することで利用できるようになります。
PagerDuty Service での自動Resolve設定を行っていない限りは、Resolveされないので手動で実施します。
インシデント
インテグレーションが初期状態(スクリプト未編集)の場合で確認します。
スクリプトはインテグレーション設定で確認が行なえます。
rawBody
にイベント内容が入ります。
重複排除
The transformer deduplicates events based upon the incident_key property within the normalized_event object.
normalized_event.incident_key
で指定します。
var normalized_event = { event_type: PD.Trigger, description: "Custom Event Transform", details: PD.inputRequest, incident_key: XXXXX, };
スクリプトの変更はインテグレーション設定から行います。
Event API v2
Event API には v1 と v2 のバージョンが有り、Custom Event Transformer
の初期スクリプトは v1 となっています。
- Platform Extensibility with API v2 and the Custom Events Transformer | PagerDuty
- PagerDuty DEVELOPER PLATFORM
機能拡張されており、Severity の指定などはv2からの機能となります。
Custom Event Transformer のドキュメントは v1 配下に有り、v2についての明記はありません。
しかし、v1/v2 とも、 PD オブジェクトを使用する形となっており、Custom Event Transformer も v2 での記述が可能です。
v2版での PD オブジェクトについては DEVELOPER PLATFORM の "Writing App Event Transformers" ページが参考になります。
インシデント(v2版)
初期スクリプトをv2の記述に変更して確認します。
let body = PD.inputRequest.rawBody; let normalized_event = { event_action: PD.Trigger, payload: { summary: "Custom Event Transform v2", source: "raw event", severity: PD.Critical, custom_details: body }, }; PD.emitEventsV2([normalized_event]);
インシデント(v2 SNS版)
SNS のイベントに合わせて整形して確認します。
let body = JSON.parse(PD.inputRequest.rawBody); let summary = body.TopicArn; let custom_details = body; if (body.Message) { try { custom_details.Message = JSON.parse(body.Message); } catch(e) { ; } } let normalized_event = { event_action: PD.Trigger, payload: { summary: summary, source: "sns", severity: PD.Critical, custom_details: custom_details }, }; PD.emitEventsV2([normalized_event]);
注意点
スクリプトを編集した後に SNS Subscription の Confirm を行う場合、通常のメッセージ(Type:Notification) とは異なる形式でイベントが送信されます。 confirm を実施するためには、"Subscription Confirmation"(Type:SubscriptionConfirmation) の形式にもスクリプトが対応している必要があります。