AWSのAPIゲートウェイの使用私は、KinesisのPutRecords
アクションに対するAWSプロキシとしてAPIリソースを設定しました。 APIのコンシューマーは、これらのイベントをキネシスのストリームに転送するのに必要なイベントのリストを私に送信します。JSONPath APIゲートウェイボディマッピングのAcces変数
データをAPIゲートウェイに送信する形式は、これと似ています。これには、配列型のトップレベル要素が1つ含まれています。各配列項目のオブジェクトタイプは、JSONドキュメントされています。必要なのはキネシスレコードにそれぞれ別のイベントを破り、キネシスへbase64Encoded
文字列と、それを送信するために
{
"events":[
{
"time":"2017-01-01T11:43:21",
"type":"ItemSelected",
"application":"iOS Build 3654"
},{
"time":"2017-01-01:11:55:32",
"type":"ItemSelected",
"application":"iOS Build 3654"
}
]
}
です。
ボディマッピングテンプレートの使用私は以下を設定しました。 '$.events[$countVal]'
:
{
"StreamName":"MemberApiAuditLog",
"Records":[
#foreach($elem in $input.path('$.events')){
#set($countVal=$foreach.count-1)
"Data":"$util.base64Encode($input.json('$.events[$countVal]'))",
"PartitionKey":"$input.path('$.memberid')"
}
#end
]
}
私がいる問題は、マッピングテンプレートは、このコードでは、この$countVal
変数に問題があるようには見えないということです。それは何とかちょうど$countVal
を認識しません。私がを0
に置き換えると、うまく動作します。
$input.json(x)
を使用する必要があります。マッピングテンプレートは、jsonオブジェクトを文字列化する別の方法を提供しないためです。
質問:
$input.json(x)
以外
- ボディマッピングテンプレートでJSONオブジェクトを文字列化する方法はありますか?
- 私はJSON.stringify(オブジェクト)を試しましたが、うまくいきませんでした。
- この式で
countVal
の値を認識するには、どうすればコードを取得できますか?それが解決できれば、問題は解決されます。
がここでの問題は、あなたが再びbase64でデコードするとき、それは適切なJSONドキュメント 'ではないということです{アプリケーション= iOSが3654を構築します} 'vs' {"application" = "iOS Build 3654"} ' - 最初のプロパティはプロパティ名と値の引用符を持っていません。 –
正しいJsonドキュメント@JDStuartを取得する運がありますか? – kanedaki