[アップデート]Step Functionsの実行ステータスが変化したときにCloudWatchイベントが発行できるようになりました!

Step Functionsステートマシンで実行ステータスが変化したときに、CloudWatchイベントが発行できるようになりました! これにより、ステートマシンのステータスが変化した時にCloudWatchイベントを通し、Lambda、SNS、Kinesisなどに連携できるようになったということです。早速試してみたいと思います。
2019.05.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Step Functionsステートマシンで実行ステータスが変化したときに、CloudWatchイベントが発行できるようになりました!!!

これまで、ステートマシンの実行結果など、ステータスを得るには、APIを使用した常時ポーリングや、CloudWatchメトリクス、CloudTrailと連携した作り込みが必要でした。

今回のアップデートにより、ステートマシンのステータスが変化した時にCloudWatchイベントを通し、Lambda、SNS、Kinesisなどに連携できるようになったということです。

全国1000万人のStep Functionsファンにはたまらないアップデートかと思います!

本エントリでは、特定ステートマシンの全ステータスを、SNSトピック(メール)に通知し、発行されたイベントを確認してみたいと思います。

Step Functions作成

ステートマシンの作成は従来どおりです。「IsSucceed」ステートで入力イベントを判定して、実行ステータスを振り分けるステートマシンを作成しました。

01

定義は以下となります。

{
  "StartAt": "IsSucceed",
  "TimeoutSeconds": 10,
  "States": {
    "IsSucceed": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.mayoi",
          "StringEquals":"Fail",
          "Next": "FailState"
        },
        {
          "Variable": "$.mayoi",
          "StringEquals":"Timeout",
          "Next": "WaitState"
        }
      ],
      "Default": "SuccessState"
    },
    "SuccessState": {
      "Type": "Succeed"
    },
    "FailState": {
      "Type": "Fail"
    },
    "WaitState": {
      "Type": "Wait",
      "Seconds": 15,
      "End": true
    }
  }
}

CloudWatchイベントルール作成

作成したステートマシンを選択し「アクション」より「CloudWatchイベントルールの作成」をクリックします。

02

CloudWatchのコンソールがオープンされますので、以下を設定し「設定の詳細」をクリックします。

  • サービス名…Step Functions
  • イベントタイプ…Step Functions Execution Status Change
  • 特定のステータス…ABORTEDFAILEDRUNNINGSUCCEEDEDTIMED_OUT
  • 特定のステートマシンARN…作成したステートマシンのARN
  • ターゲット…SNSトピック

03

任意のルールを名を指定し「ルールの作成」をクリックします。

04

CloudWatchイベントルールが作成されました。

05

動作確認

RUNNING & SUCCEEDED

ステータスRUNNINGと、SUCCEEDEDのイベントを確認します。

最終的にステータスを「成功」にさせるため「SuccessState」ステートを実行したいので、以下のイベントを渡しステートマシンを実行します。

{
  "mayoi": "Succes"
}

「SuccessState」ステートが実行され、ステータスが「成功」になりました。

06

18

CloudWatchイベントルールにて、SNSトピック(メール)を指定していますので、メールを確認します。

RUNNINGステータスのイベントが確認できました。ステートマシン実行時に渡したイベントも出力されています。

07

最終的にステートマシンのステータスは「成功」になりましたので、SUCCEEDEDステータスのイベントも確認できました。

08

通知されるイベントの詳細については、以下をご確認ください。

FAILED

実行ステータスFAILEDのイベントを確認します。

最終的にステータスを「失敗」にさせるため「FailState」ステートを実行したいので、以下のイベントを渡しステートマシンを実行します。

{
  "mayoi": "Fail"
}

「FailState」ステートが実行され、ステータスが「失敗」になりました。

10

09

メールを確認すると、FAILEDステータスのイベントが確認できました。

11

RUNNINGステータスのイベントも通知されますが、先程と同様のため割愛しています。(以下同様)

TIMED_OUT

実行ステータスTIMED_OUTのイベントを確認します。

最終的にステータスを「タイムアウト」にさせるため「WaitState」ステートを実行したいので、以下のイベントを渡しステートマシンを実行します。

{
  "mayoi": "Timeout"
}

「WaitState」ステートが実行され、ステータスが「タイムアウト」になりました。

12

13

メールを確認すると、TIMED_OUTステータスのイベントが確認できました。

14

ABORTED

実行ステータスABORTEDのイベントを確認します。

最終的にステータスが「中断」になるよう、以下のイベントを渡しステートマシンを実行した直後に、手動で中断します。

{
  "mayoi": "Timeout"
}

「WaitState」ステートが実行され、ステータスが「中断」になりました。

15

16

メールを確認すると、ABORTEDステータスのイベントが確認できました。

17

さいごに

これまで、ステートマシンで受けたイベント、生成されたイベントなどを含めて通知を行う際は、様々な作り込みが必要でした。今回のアップデートにより、そういった作り込みを行わず、よりシンプルStep Functionsが利用できるようになったと思います。

参考