[アップデート]Step Functionsの実行ステータスが変化したときにCloudWatchイベントが発行できるようになりました!
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が利用できるようになったと思います。