Amazon EventBridge今回の目的イベントの検知設定通知1. AWS ChatbotとAmazon SNS 1-1. Input Transformer実行した結果2. Slack API2-1. Input Transformer実行した結果まとめ参考
Amazon EventBridge
AWS上で検知できるイベントを元に他処理を実行できるサービスです。
汎用性も高い上に、さらにサーバレスで動くということで運用面でも嬉しいサービスです。
製品ページでは「大規模なシステム」と謳っている中で、Slack通知という小さい活用でなんかすみません。
今回の目的
AWS Step Functions(以下、SFn)で実装している処理の失敗したときのエラーをSlackに通知させたいことが目的です。
イベントの検知設定
特定のSFnでエラーになりうるステータス(FAILED, TIMED_OUT, ABORTED)で検知する仕組みにしました。
{
"source": ["aws.states" ],
"detail-type" : ["Step Functions Execution Status Change"],
"detail": {
"status": ["FAILED", "TIMED_OUT", "ABORTED"],
"stateMachineArn": ["arn:aws:states: us-west-2:xxxxxx:stateMachine:gatherUserTime"]
}
}
通知
2つ実装方法を試しました。
ここでポイントになってくるのがSlackに通知させる際のメッセージとなります。
メッセージ内容をEventBridge内の Input Transformer にてカスタマイズすることで実現しています。
1. AWS ChatbotとAmazon SNS
Slackとの連携で一番手頃にできるのはAWS Chatbotと組み合わせた場合ではないでしょうか
1-1. Input Transformer
Input path
{
"account": "$.account",
"detail-executionArn": "$.detail.executionArn",
"detail-input": "$.detail.input",
"detail-name": "$.detail.name",
"detail-stateMachineArn": "$. detail.stateMachineArn",
"detail-status": "$.detail.status",
"detail-type": "$.detail-type",
"id": "$.id",
"region": "$.region",
"resources": "$.resources",
"source": "$. source",
"time": "$.time",
"version": "$.version"
}
Input template
{
"version": <version>,
"id": <id>,
"detail-type": "[<detail-status>] <detail-type>",
"source": <sources,
"account": <account>,
"time": <time>,
"region": <region>,
"resources": [
"https://<region>.console. aws.amazon.com/states/home?region=<region>#/execution/<detail-executionArn>"
]
}
実行した結果
2. Slack API
SlackのREST APIで通知を簡単に実現することも可能です。
2-1. Input Transformer
Input path
{
"account": "$.account",
"detail-executionArn": "$.detail.executionArn",
"detail-name": "$.detail.name",
"detail-stateMachineArn": "$.detail.stateMachineArn",
"detail-status": "$.detail.status",
"detail-type": "$.detail-type",
"id": "$.id",
"region": "$.region",
"source": "$. source",
"time": "$.time",
"version": "$.version"
}
Input template
{
"channel": "$Chanel IDを設定$",
"text": "[<detail-status >] <detail-type> \nStateMachine Arn: <detail-stateMachineArn>"
}
実行した結果
まとめ
通知を実装する目的自体は達成できました。
私個人の主観でのそれぞれ実装した感想は次のとおりです。
通知で利用する仕組み | 実装の容易さ | 通知内容の柔軟性 |
---|---|---|
AWS Chatbot + Amazon SNS | △:複数のサービスに渡る | ○:柔軟に変更可能 |
Slack API | ○:API Endpointさえあればいい | △:通知内容の修正が難しい |
また、EventBridgeはCloudWatch Eventsが統合されて以降も特にEvents以外にサービスを使っていなかったので、今回利用する経験が得られてよかったです。