AWS Step Functions の入出力処理について整理
はじめに
こんにちは。D2C データサイエンティストの仲山です。
Step Functionsを業務で初めて使用することになったとき、1番理解に時間がかかったのが入出力処理でした。
それぞれがどのような役割を持っているのかがわからず、想定通りの動き方をさせることに時間がかかりました。
そこで今回は実際にステートマシンを実行しながら、それぞれの機能について動作や役割を整理したいと思います。
Step Functionsでは、ステートへの入出力処理に主に以下を使用します。
・InputPath
・OutputPath
・Parameters
・ResultPath
整理する方法としては、Pass
タイプのステートにある情報を入力した時に、どのような出力結果が出てくるのかを確認していきます。
ステートへの入力情報には、下記を使用します。
{
"AAA": "BBB",
"XXX":{
"YYY":"ZZZ"
}
}
InputPath
InputPathはステートへの入力情報をフィルタリングします。
"$"
と記載するとデフォルトの動作をし、デフォルトの場合は全ての入力情報を次の処理へ渡します。
{
"InputPath": "$"
}
上記のようにInputPathをデフォルトで実行すると、下記の通りステートへの入力情報全てをステートから出力します。
{
"AAA": "BBB",
"XXX": {
"YYY": "ZZZ"
}
}
InputPathで特定のキーを指定すると、指定した情報のみにフィルタリングされます。
{
"InputPath": "$.XXX"
}
実行結果は下記の通りです。
{
"YYY": "ZZZ"
}
OutputPath
OutputPathはステートへの出力情報をフィルタリングします。
InputPathと同じく、デフォルト動作の場合は全ての情報をステートから出力します。
{
"InputPath": "$",
"OutputPath": "$"
}
実行結果は下記の通りです。
{
"AAA": "BBB",
"XXX": {
"YYY": "ZZZ"
}
}
特定の情報のみを出力したい場合は、キーを指定します。
{
"InputPath": "$",
"OutputPath": "$.XXX"
}
出力情報は下記の通りです。
{
"YYY": "ZZZ"
}
Parameters
Parametersではステートの中で新たなキーとバリューのペアを定義することができます。
{
"InputPath": "$",
"Parameters": {
"CCC": "DDD"
},
"OutputPath": "$"
}
Parametersの中で新たに"CCC": "DDD"
を定義して実行すると、出力結果は下記のようになります。
{
"CCC": "DDD"
}
このように最初にステートへ入力した情報は出力されず、Parametersで定義した値が出力されます。
そのため、最初に入力した情報をステートから出力したい場合は後述するResultPathを使用する必要があります。
また、Parametersではステートに入力した情報を用いることができます。
{
"InputPath": "$",
"Parameters": {
"Input_AAA.$": "$.AAA",
"CCC": "DDD"
},
"OutputPath": "$"
}
上記ステートでの実行結果は下記の通りです。
{
"CCC": "DDD",
"Input_AAA": "BBB"
}
ResultPath
ResultPathはステートへ出力する情報を選択することができます。
ResultPathの値に$.任意の文字列
と入力すると、ステートへの入力情報とParametersによる出力情報の両方をステートから出力します。
{
"InputPath": "$",
"Parameters": {
"CCC": "DDD"
},
"ResultPath": "$.result",
"OutputPath": "$"
}
上記ステートからの出力情報は下記の通りです。
Parametersの出力情報はresult
の中に入っています。
{
"AAA": "BBB",
"XXX": {
"YYY": "ZZZ"
},
"result": {
"CCC": "DDD"
}
}
デフォルト動作である"ResultPath": "$"
とした場合、ステートへの入力情報は破棄されParametersの出力結果のみが、ステートからの出力結果になります。
{
"CCC": "DDD"
}
"ResultPath": null
とした場合、Parametersの出力結果が破棄され、ステートへの入力情報がステートからの出力結果になります。
{
"AAA": "BBB",
"XXX": {
"YYY": "ZZZ"
}
}
おわりに
今回はStep Functionsの入出力処理について実際に実行してみながら、動作や役割を確認しました。
入出力処理 | 役割 |
---|---|
InputPath | ステートへの入力情報をフィルタリングする |
OutputPath | ステートへの出力情報をフィルタリングする |
Parameters | ステートの中で新たなキーとバリューのペアを定義する |
ResultPath | ステートから出力する情報を選択する |
今回整理した入出力処理は実装する上で、基礎的な部分になります。
改めて基礎的な部分を整理できたことで、今後の業務ではよりスムーズにStep Functionsを実装できそうだと感じました。
今後も業務でStep Functionsを使用する場面は多々ありそうなので、勉強していきたいと思います。
参考
株式会社D2C d2c.co.jp のテックブログです。 D2Cは、NTTドコモと電通などの共同出資により設立されたデジタルマーケティング企業です。 ドコモの膨大なデータを活用した最適化を行える広告配信システムの開発をしています。
Discussion