Я использую AWS API Gateway, интегрированный с Lambda.
Примечание: Я НЕ использую Lambda Proxy.
Мне нужно вернуть двоичный ответ от API Gateway.Я успешно настроил это следующим образом:
- Кодировал мои двоичные данные в виде строки base64 UTF-8 и возвращал ТОЛЬКО то, что из моей лямбда-функции
return "base64 encoded binary data"
- Включено
CONVERT_TO_BINARY
вклОтвет интеграции API-шлюза - Отображение заголовка
Content-Type
в методе API-шлюза Ответ на тип двоичного мультимедиа моего двоичного содержимого - Добавлен тип мультимедиа моего двоичного содержимого в список 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.