Лямбда-интеграция шлюза AWS API (НЕ Proxy) - как отправлять пользовательские заголовки и двоичные данные - PullRequest
0 голосов
/ 23 декабря 2018

Я использую AWS API Gateway, интегрированный с Lambda.

Примечание: Я НЕ использую Lambda Proxy.

Мне нужно вернуть двоичный ответ от API Gateway.Я успешно настроил это следующим образом:

  1. Кодировал мои двоичные данные в виде строки base64 UTF-8 и возвращал ТОЛЬКО то, что из моей лямбда-функции return "base64 encoded binary data"
  2. Включено CONVERT_TO_BINARY вклОтвет интеграции API-шлюза
  3. Отображение заголовка Content-Type в методе API-шлюза Ответ на тип двоичного мультимедиа моего двоичного содержимого
  4. Добавлен тип мультимедиа моего двоичного содержимого в список API-шлюзатипов двоичных носителей

Проблема заключается в том, что помимо отправки двоичных данных (что я могу успешно выполнить с помощью описанных выше шагов) мне необходимо включить пользовательский заголовок x-my-header в ответ API.

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

Мое понимание лямбда-интеграции (помните, я не использую лямбда-прокси здесь), что API-шлюз делает HTTP-запрос для запуска лямбда-выражения.Затем Lambda возвращает HTTP-ответ в API Gateway, добавляя функции, выводимые в тело, а также добавляя в ответ внутренние заголовки aws.

Теперь можно сопоставить заголовок с ответом метода, используя:

integration.response.header.header-name

Мой вопрос ...

Могу ли я сказать лямбду добавитьмой пользовательский заголовок для бинарного ответа, когда я использую пользовательскую лямбда-интеграцию (не прокси)?

Примечание : IF Я использовал лямбда-проксиЯ знаю, что возвращаемый объект выглядит так, как показано ниже, и тогда я смогу отправить пользовательские заголовки.Но по независящим от меня причинам я не могу использовать лямбда-прокси.

Лямбда-решение для возврата объекта ЕСЛИ Я использовал лямбда-прокси:

return {
   'body': "base64 encoded binary data",
   'headers': 'x-my-header': 'my-value',
   'isBase64Encoded': True
}

Для лямбда-интеграции (не прокси) Я попытался изменить лямбда-вывод ...

return {
   "base64-data": "base64 encoded binary data",
   "x-my-header: "some value"
}

И настроить шаблон отображения в ответе интеграции ...

$input.json("$.base64-data")

И настроить отображение заголовкаиспользуя ...

integration.response.body.x-my-header

Но API-шлюз возвращает ошибку:

Execution failed due to configuration error: Unable to transform response

Я полагаю, что эта ошибка возникает из-за того, что не может быть шаблона сопоставления при включенном CONVERT_TO_BINARY.Из документов AWS:

При преобразовании текстовой полезной нагрузки в двоичный двоичный объект API Gateway предполагает, что текстовые данные являются строкой в ​​кодировке Base64, и выводит двоичные данные в виде двоичного объекта, декодированного в Base64.Если преобразование завершается неудачно, возвращается ответ 500, указывающий на ошибку конфигурации API.Вы не предоставляете шаблон сопоставления для такого преобразования, хотя вы должны включить сквозное поведение в API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...