vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

AWS から PagerDuty への通知連携(10)

EventBridge -> Global Orchestration (Email)

Global Ruleset および Global Orchestration は Email Address を持っています。



導入

SNS Subscription では Email または Email-JSON で送信できるので、2パターン試します。

AWS SNS の Subscription に Global Orchestration の "Email Address" を Protocol "Email" または "Email-JSON" として指定します。

f:id:htnosm:20220410133821p:plain

"AWS Notification - Subscription Confirmation" の件名でAlertが作成されるので、confirm を実施することで利用できるようになります。(ルールに合致しない状態ではインシデントは作成されません。)

この際、同一件名で Alert が Triggered (Suppressed) の状態だとAlertも新規発行されず追加となります。 新規発行としたい場合はAlertもResolve(Resolve(Suppressed) の状態)にしておく必要があります。

ルール(ルーティングルール)

利用できるfieldは以下になります。

> - event.custom_details.from[0](the from address)
>> * The [0] refers to the 1st position in a list of emails. If you would like to generally search through a list of emails (either in the "to" field or the "from" field), please set to event.custom_details.from or event.custom_details.to.
>
> - event.custom_details.subject (the subject line)
> - event.custom_details.plain_body (the email body)

TopicArn の形式などで Email, Email-JSON の判別もできます。

f:id:htnosm:20220410133825p:plain

# Email
`event.custom_details.subject` matches `AWS Notification Message`
and
`event.custom_details.plain_body` matches part `?SubscriptionArn=arn:aws:sns:ap-northeast-1:123456789012:example-aws-to-pd-eventbridge:`

# Email-JSON
`event.custom_details.subject` matches `AWS Notification Message`
and
`event.custom_details.plain_body` matches part `"TopicArn" : "arn:aws:sns:ap-northeast-1:123456789012:example-aws-to-pd-eventbridge"`

インシデント

初期状態でのインシデントタイトルはメール件名で作成されます。

AWS Notification Message

詳細欄はメール本文です。 Email は Message の内容のみとなるので、 Email-JSON の方が若干情報量が多いです。

重複排除

Ruleの "Transformations" から変更します。

Transformations (サービスルール)

Transformationsを参考に出力内容を調整します。

Summary を TopicName と detail-type に変換、 また、都度インシデントを作成するため dedep_key に MessageId を設定します。
Message は JSON 文字列 となっているので正規表現で抜き出します。

f:id:htnosm:20220410133829p:plain

Email

  • Define Custom Variable
Name Regex Source
topic_name ^.*SubscriptionArn=(?:[^:]*:){5}([^:]*):.*$ event.custom_details.plain_body
detail_type ^.*"detail-type":"([^"]*)".*$ event.custom_details.plain_body
message_id ^.*"id":"([^"]*)".*$ event.custom_details.plain_body
  • Replace Event Field
Event Field (CEF) Value
summary Email [{{variables.topic_name}}] {{variables.detail_type}}
dedup_key {{variables.message_id}}

Email-JSON

  • Define Custom Variable
Name Regex Source
topic_name ^.*"TopicArn" : "(?:[^:]*:){5}([^"]*)".*$ event.custom_details.plain_body
detail_type ^.*"Message" : ".*"detail-type\\":\\"([^\\]*)\\".*$ event.custom_details.plain_body
message_id ^.*"MessageId" : "([^"]*)".*$ event.custom_details.plain_body
  • Replace Event Field
Event Field (CEF) Value
summary Email-JSON [{{variables.topic_name}}] {{variables.detail_type}}
dedup_key {{variables.message_id}}

インシデント(変換後)

Summary が変換されたことを確認できます。
dedup_key を指定したことにより、インシデントがTriggeredの状態で残っている状態で再度同一イベントが発生した場合にも、インシデントが作成されます。