StepFunctionsの基本

概要

Step Functionsの基本を書いていきます。わかったら追記します。

デバッグ方法

とりあえず挙動を確認するには Workflow Studio を使って手で動かすのが良さそうです。
慣れてからJSONを加工するようにすると良いと思います。

Workflow Studioでpassを使う

どんな結果が返ってくるかを見るのに pass を使うと便利です。
これは特に何も処理をしないStateですが、入出力を確認したり、加工したりできます。

以下検証はPassを使って、入力、出力を確認しています。

InputPath

これは受け取ったInputのJSONをフィルタリングするのに使えます。
例えば下記のようなInputのJSONが渡った場合。

{
  "flowName": "example",
  "id": 12345,
  "name": {
    "firstname": "taro",
    "lastname": "suzuki"
  }
}

InputPathで下記のようにフィルタリングする。

"InputPath": "$.name"

そうすると結果としては下記が返ってくる。

{
  "firstname": "taro",
  "lastname": "suzuki"
}

Idを指定すると、

"InputPath": "$.id"

下記が返ってくる。

12345

OutputPath

OutputPathを使うと、出力をフィルタリングできる。
入力JSONが下記だったとする。

{
  "flowName": "example",
  "id": 12345,
  "name": {
    "firstname": "taro",
    "lastname": "suzuki"
  }
}

OutputPathに下記を指定する。

$.name.lastname

すると下記lastnameだけが出力される。

"suzuki"

ResultPath

既存のInputのJSONにStateのなにかの出力を追加する場合に使う。
例えば、stateの名前と実行ステータスコードを結果として、resultというKeyに追加したい場合は下記のように指定する。

{
  "stateName": "Pass",
  "statusCode": "200"
}

$.result は $ がJSONのツリー階層を表していて、例えば下記のような入力を渡すと、

{
 "taskName": "example"
}

出力は下記のようになる。

{
  "taskName": "example",
  "result": {
    "stateName": "Pass",
    "statusCode": "200"
  }
}

Parameters

InputPathと似ているけど用途が異なる。
InputPathは入力JSONから特定のKEYの値を取り出すことに使える。
Parametersは入力JSONを元に別のJSONを作る場合に使える。

入力JSON

{
  "flowName": "example",
  "id": 12345,
  "name": {
    "firstname": "taro",
    "lastname": "suzuki"
  }
}

Parametersで下記を指定したとする。

"Parameters": {
  "inputId.$": "$.id"
}

出力は下記となる。新しいKEY名で出力されている。

{
  "inputId": 12345
}

もう少し露骨な例にすると、最終的にほしいJSONをParametersで作る。
入力JSONは最初と同じとする。
下記の例では、nameが1階層下になっているのをフラットにするようにしている。

{
  "new_flowName.$": "$.flowName",
  "new_Id.$": "$.id",
  "new_lastname.$": "$.name.lastname",
  "new_firstname.$": "$.name.firstname"
}

そうすると下記が返ってくる。

{
  "new_firstname": "taro",
  "new_Id": 12345,
  "new_flowName": "example",
  "new_lastname": "suzuki"
}