この記事は公開されてから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が利用できるようになったと思います。