4

В коде AWS Lambda, как я могу получить HTTP-метод (например, GET, POST ...) HTTP-запроса, исходящего из API шлюза AWS?Как получить метод HTTP в AWS Lambda?

Я понимаю из documentation, что context.httpMethod - решение для этого.

Однако я не могу заставить его работать.

Например, когда я пытаюсь добавить следующие 3 строки:

if (context.httpMethod) { 
      console.log('HTTP method:', context.httpMethod) 
    } 

INTO в AWS образец кода "microservice-клиента-конечная точка" план выглядит следующим образом:

exports.handler = function(event, context) { 

    if (context.httpMethod) { 
     console.log('HTTP method:', context.httpMethod) 
    } 

    console.log('Received event:', JSON.stringify(event, null, 2)); 

    // For clarity, I have removed the remaining part of the sample 
    // provided by AWS, which works well, for instance when triggered 
    // with Postman through the API Gateway as an intermediary. 
}; 

I никогда не имеет ничего в журнале, потому что httpMethod всегда пуст.

ответ

9

Подход context.httpMethod работает только в шаблонах. Итак, если вы хотите получить доступ к HTTP-методу в своей функции Lambda, вам нужно найти этот метод в Gateway API (например, GET), перейдите в раздел Integration Request, нажмите на Сопоставление шаблонов и добавьте новый шаблон сопоставления для application/json. Затем выберите application/json и выберите Mapping Template и в окне редактирования ввести что-то вроде:

{ "http_method": "$context.httpMethod" }

Затем, когда ваша функция Lambda называется, вы должны увидеть новый атрибут в event принятый в называется http_method, который содержит метод HTTP, используемый для вызова функции.

+0

Спасибо. Кстати, только небольшая ошибка опечатки в вашем ответе: '" "$ context.httpMethod" 'is' "$ context.httpMethod" ' –

+0

Спасибо, я исправил это. – garnaat

+0

Работает ли это с вами, ребята, с расширением Chrome Advanced REST client? Я получаю null для переменных контекста, когда я его использую, но он работает с расширениями Postman и DHC или прямым вызовом в браузере, если это конечная точка GET. –