![[アップデート]Step Functionsの実行ステータスが変化したときにCloudWatchイベントが発行できるようになりました!](https://devio2023-media.developers.io/wp-content/uploads/2019/04/aws-step-functions.png)
[アップデート]Step Functionsの実行ステータスが変化したときにCloudWatchイベントが発行できるようになりました!
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Step Functionsステートマシンで実行ステータスが変化したときに、CloudWatchイベントが発行できるようになりました!!!
これまで、ステートマシンの実行結果など、ステータスを得るには、APIを使用した常時ポーリングや、CloudWatchメトリクス、CloudTrailと連携した作り込みが必要でした。
今回のアップデートにより、ステートマシンのステータスが変化した時にCloudWatchイベントを通し、Lambda、SNS、Kinesisなどに連携できるようになったということです。
全国1000万人のStep Functionsファンにはたまらないアップデートかと思います!
本エントリでは、特定ステートマシンの全ステータスを、SNSトピック(メール)に通知し、発行されたイベントを確認してみたいと思います。
Step Functions作成
ステートマシンの作成は従来どおりです。「IsSucceed」ステートで入力イベントを判定して、実行ステータスを振り分けるステートマシンを作成しました。

定義は以下となります。
{
  "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イベントルールの作成」をクリックします。

CloudWatchのコンソールがオープンされますので、以下を設定し「設定の詳細」をクリックします。
- サービス名…Step Functions
- イベントタイプ…Step Functions Execution Status Change
- 特定のステータス…ABORTED、FAILED、RUNNING、SUCCEEDED、TIMED_OUT
- 特定のステートマシンARN…作成したステートマシンのARN
- ターゲット…SNSトピック

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

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

動作確認
RUNNING & SUCCEEDED
ステータスRUNNINGと、SUCCEEDEDのイベントを確認します。
最終的にステータスを「成功」にさせるため「SuccessState」ステートを実行したいので、以下のイベントを渡しステートマシンを実行します。
{
  "mayoi": "Succes"
}
「SuccessState」ステートが実行され、ステータスが「成功」になりました。


CloudWatchイベントルールにて、SNSトピック(メール)を指定していますので、メールを確認します。
RUNNINGステータスのイベントが確認できました。ステートマシン実行時に渡したイベントも出力されています。

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

通知されるイベントの詳細については、以下をご確認ください。
FAILED
実行ステータスFAILEDのイベントを確認します。
最終的にステータスを「失敗」にさせるため「FailState」ステートを実行したいので、以下のイベントを渡しステートマシンを実行します。
{
  "mayoi": "Fail"
}
「FailState」ステートが実行され、ステータスが「失敗」になりました。


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

RUNNINGステータスのイベントも通知されますが、先程と同様のため割愛しています。(以下同様)
TIMED_OUT
実行ステータスTIMED_OUTのイベントを確認します。
最終的にステータスを「タイムアウト」にさせるため「WaitState」ステートを実行したいので、以下のイベントを渡しステートマシンを実行します。
{
  "mayoi": "Timeout"
}
「WaitState」ステートが実行され、ステータスが「タイムアウト」になりました。


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

ABORTED
実行ステータスABORTEDのイベントを確認します。
最終的にステータスが「中断」になるよう、以下のイベントを渡しステートマシンを実行した直後に、手動で中断します。
{
  "mayoi": "Timeout"
}
「WaitState」ステートが実行され、ステータスが「中断」になりました。


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

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












