概要
Step Functions の ResultPath を指定したものの、以下エラーが発生することがある。
{
"error": "States.ReferencePathConflict",
"cause": "Unable to apply ReferencePath $.someTaskResult to input \"input1\""
}
ここでは someTaskResult
という key に結果を出力しようと試みている。
原因
ステップの入力が Object 型ではない可能性がある。
例えば、プリミティブな String が入力された場合、当然ながら someTaskResult
という key は設定できない。例えば Map を使う場合、イテレーションの対象として List を使わなければいけないが、List の各値がプリミティブ型だった場合、イテレータに渡る入力としてこのような事態が起こりうる。
対策
前段の出力を加工し、Object 型にしてしまえばよい。具体的には Parameter が使える。上述の Map による問題だった場合も、Map に Parameter が利用できる。イテレータへの入力が Parameter によって加工された値になる。
Mapの例
"Type": "Map",
"Parameters": {
"input1.$": "$$.Map.Item.Value",
:
},
"Iterator": {
"States": {
"SomeTask": {
"ResultPath": "$.someTaskResult",
:
上記のようにすると、 { "input1": "~~~" }
という入力になるので、 SomeTask
の出力 .someTaskResult
はエラーなく入力の Object に追加されるようになる。