Шлюз API не передает заголовки в Lambda

#node.js #amazon-web-services #aws-lambda #aws-api-gateway #serverless

Вопрос:

Я пытаюсь выполнить составной http-запрос через шлюз API к Лямбде. Я установил тип двоичного носителя на «составные/данные формы». Проблема в том, что мне нужно получить доступ к заголовку типа содержимого, чтобы я мог правильно проанализировать текст в своей лямбда-логике.

Но когда я регистрирую событие lambda в консоли, я вижу, что заголовок типа содержимого отсутствует, хотя я вижу, что он хорошо отправлен моим клиентом.

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

Поэтому я предполагаю, что API Gateway самостоятельно обрабатывает мой запрос и отправляет его другую версию на мой Lambda с другими заголовками.

Как я могу заставить API Gateway передать этот заголовок в мой Lambda ?

Большое спасибо!

Ответ №1:

В запросе на интеграцию попробуйте добавить заголовок HTTP Content-Type , сопоставленный с application/x-www-form-urlencoded .

Затем добавьте шаблон сопоставления для multipart/form-data

 {
    "Content-Type" : "$input.params('Content-Type')",
    "body_base64" : "$util.base64Encode($input.body)"
}
 

Если вы используете шаблон OpenAPI для создания api с использованием terraform или без сервера, настройте x-amazon-apigateway-integration: узел

 requestTemplates:
  multipart/form-data: "{n    "Content-Type"
     : "$input.params('Content-Type')",n    "body_base64" : "$util.base64Encode($input.body)"
    n}"
passthroughBehavior: "never"
type: "aws"
 

Комментарии:

1. Знаете ли вы, как это сделать из sdk с бессерверной платформой ?

2. Вы можете добавить его как часть спецификации OpenAPI в yaml