Step Functions の結果を EventBridge 経由で Slack に通知する
下記の記事で EventBridge から Slack への通知が紹介されていたため、Step Functions で試してみました。
基本的な流れは記事で説明されているので省略します。Step Functions 固有の内容だけ本記事で説明します。
Step Functions のイベント
EventBridge では state machine の ARN やステータスを絞り込めます。例えば、以下のように記述すると全 state machine の成功と失敗のイベントを受け取ります。
{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"], "detail": { "status": ["SUCCEEDED", "FAILED"] } }
実際に Step Functions から受け取ったイベントを貼っておきます。
{ "executionArn":"arn:aws:states:us-west-2:ACCOUNT:execution:helloworld:7cdd674c-eaac-12de-b073-549373ca07fa", "stateMachineArn":"arn:aws:states:us-west-2:ACCOUNT:stateMachine:helloworld", "name":"7cdd674c-eaac-12de-b073-549373ca07fa", "status":"SUCCEEDED", "startDate":1643530763937, "stopDate":1643530764140, "input":"{\n \"Comment\": \"Insert your JSON here\"\n}", "inputDetails":{"included":true}, "output":"\"World\"", "outputDetails":{"included":true} }
input
と output
には state machine の入出力が設定されます。state machine で通知本文を出力する使い方がありそうです。
イベントの内容をダンプするには Input Transformer で以下を指定します。Slack にそのまま JSON がポストされます。
{"json":"$.detail"}
{ "channel": "ID", "text": <json> }
Slack の通知内容
以下のように state machine execution へのリンクを付けておくと便利です。
{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "<status> `<output>`" } }, { "type": "context", "elements": [ { "type": "mrkdwn", "text": "https://us-west-2.console.aws.amazon.com/states/home?region=us-west-2#/executions/details/<executionArn>" } ] } ] }