Заголовки Http-запроса AWS API Gateway не передаются в lambda - PullRequest
0 голосов
/ 22 сентября 2019

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

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

Также в ответе интеграции я не могу ссылаться на него внутри параметров ответа заголовка интеграции.«Integration.response.header.cokers» будет возвращен пустым, когда я вызову API. Вот как я настроил ответ интеграции

1 Ответ

0 голосов
/ 26 сентября 2019

В конечном итоге решение заключается в реализации интеграции лямбда-прокси .

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

ПРИМЕЧАНИЕ: Lambda имеетвернуть определенный формат ответа обратно в API Gateway, если это интеграция с прокси.В конечном итоге ответ должен выглядеть примерно так:


    {
        'statusCode': 200,
        'headers': {
            'echo-proxy': True
        },
        'body': 'some payload'
    }

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

Если вам нужно отобразить заголовки вручную, начните с их отображения в запросе метода, чтобы он мог перейти к следующему шагу и так далее.Примерно так:

Запрос метода -> Отображение переменной в запрос на интеграцию -> Перемещение переменной в шаблон отображения тела -> Отображение переменной в заголовок фактического запроса

Что у вас естьна скриншоте для запроса на интеграцию -> HTTP-заголовки:

Имя: cokers Отображено с: 'blah'

Однако, "сопоставленный с" должен выглядеть примерно так«method.request.header.coker», который является стандартизированным путем (то есть, чтобы получить значение из поля заголовка запроса метода с именем «coker»).

После того, как вы добавили заголовок кокера в запрос метода, и HTTP-заголовки запроса интеграции отображаются правильно, вы должны реализовать шаблон отображения.Установите тип содержимого для application / json, для параметра passthrough установлено «Когда шаблоны не определены (рекомендуется)» и простой шаблон сопоставления:


    {
      "headers": {
        "coker" : "$input.params('coker')"
      }
    }

Таким образом настраивается мой API, и он возвращаетдля меня следующее, потому что моя лямбда-функция возвращала событие как объект json обратно в API GW:


{"body": "{\"headers\": {\"coker\": \"mapped\"}}", "statusCode": 200}

ПРИМЕЧАНИЕ: значение моего заголовка "кокер" в запросе на стороне клиента равно "отображается "

...