Step Functions の入力値に、分岐条件の変数が含まれない時のデフォルトの動作を設定する

Step Functions の入力値に、分岐条件の変数が含まれない時のデフォルトの動作を設定する

はじめに

Step Functions は実行時に入力する JSON の値に応じて、処理を分岐させることができます。 しかし分岐の条件に使用する変数が JSON に含まれないとエラーが発生します。 本記事では、分岐の条件に使用する変数が JSON に含まれない時のデフォルトの動作を設定する方法についてまとめます。

対象者

この記事は下記のような人を対象にしています。

  • Step Functions 実行時のデフォルトの動作を設定したい人

ステートマシンの例

以下のステートマシンにおいて、特別な処理の実施有無は入力される JSON に応じて、次のようになります。

  • 変数 choice の値が true の場合:特別な処理を実施する
  • 変数 choice の値が true 以外の場合:特別な処理を実施しない
  • 変数 choice が含まれない場合:特別な処理を実施しない

ポイントは Choice ステート内で IsPresent を使用している点です。これにより存在しない変数にアクセスした際のエラーを防ぐことができます。

ASL はこちらです。

{
 "Comment": "A description of my state machine",
 "StartAt": "Choice",
 "States": {
 "Choice": {
 "Type": "Choice",
 "Choices": [
 {
 "And": [
 {
 "Variable": "$.choice",
 "IsPresent": true
 },
 {
 "Variable": "$.choice",
 "BooleanEquals": true
 }
 ],
 "Next": "特別な処理"
 }
 ],
 "Default": "タスク1"
 },
 "特別な処理": {
 "Type": "Task",
 "Resource": "arn:aws:states:::glue:startJobRun.sync",
 "Parameters": {
 "JobName": "myJobName"
 },
 "Next": "タスク1"
 },
 "タスク1": {
 "Type": "Task",
 "Resource": "arn:aws:states:::glue:startJobRun.sync",
 "Parameters": {
 "JobName": "myJobName"
 },
 "Next": "タスク2"
 },
 "タスク2": {
 "Type": "Task",
 "Resource": "arn:aws:states:::glue:startJobRun.sync",
 "Parameters": {
 "JobName": "myJobName"
 },
 "End": true
 }
 }
}

おわりに

本記事では、分岐の条件に使用する変数が JSON に含まれない時のデフォルトの動作を設定する方法についてまとめました。この記事がどなたかの参考になれば幸いです。

参考