GeekFactory

int128.hatenablog.com

Step Functions の結果を EventBridge 経由で Slack に通知する

下記の記事で EventBridge から Slack への通知が紹介されていたため、Step Functions で試してみました。

dev.classmethod.jp

基本的な流れは記事で説明されているので省略します。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}
}

inputoutput には 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>"
                }
            ]
        }
    ]
}