Как должен выглядеть шаблон сопоставления для AWS Firehose PutRecordBatch в API Gateway? - PullRequest
2 голосов
/ 12 марта 2019

Я успешно настроил API, который интегрировал Kinesis Firehose с AWS API Gateway, используя PutRecord, используя эти инструкции (https://aws.mannem.me/?p=1152 - note : он говорит небезопасно, но я все равно нажал, так как я нужно было).

Я пытаюсь настроить API для PutRecordBatch (по сути, позволяет записывать более одной записи одновременно), но я продолжаю получать

{ "__type": "SerializationException"}

Основываясь на результатах многочасового исследования, шлюз API выдает эту ошибку, если формат входящего вызова API не соответствует шаблону отображения, указанному в запросе на интеграцию. Я изо всех сил пытаюсь понять, как исправить мой шаблон сопоставления.

Вот мой шаблон сопоставления:

{
    "StreamName": "$input.path('DeliveryStreamName')",
    "Records": [
           #foreach($elem in $input.path('$.Records'))
              {
                "Data": "$util.base64Encode($elem.Data)",
              }#if($foreach.hasNext),#end
            #end
        ]
}

Вот тестовые данные, которые я отправляю:

{
    "DeliveryStreamName": "test",
    "Records": [{
        "Data": "SampleDataStringToFirehose"
    },
    {
        "Data": "SampleDataStringToFirehose2"
    }]
}

1 Ответ

0 голосов
/ 13 апреля 2019

Так глупо, но шаблон сопоставления содержит ошибку, в конце

есть дополнительная запятая

«Данные»: «$ util.base64Encode ($ elem.Data)»,

это вызывает проблему. Ниже приведена правильная версия:

{
    "DeliveryStreamName": "$input.path('$.DeliveryStreamName')",
    "Records": [
           #foreach($elem in $input.path('$.Records'))
              {
                "Data": "$util.base64Encode($elem.Data)"
              }#if($foreach.hasNext)#end
            #end
        ]
}
...