например, если мы хотим использовать
GET /user?name=bob
или
GET /user/bob
Как бы вы передали оба этих примера в качестве параметра в функцию Lambda?
Я видел кое-что об установке «сопоставленного» в документации, но не могу найти этот параметр в консоли API Gateway.
method.request.path.parameter-name
для параметра пути с именем,parameter-name
определенным на странице запроса метода.method.request.querystring.parameter-name
для параметра строки запроса, названного так,parameter-name
как определено на странице запроса метода.
Я не вижу ни одного из этих вариантов, хотя я определил строку запроса.
amazon-web-services
aws-lambda
aws-api-gateway
MonkeyBonkey
источник
источник
RequestHandler
обеспечивает реализация ?Шаги, чтобы заставить это работать:
В консоли API Gateway ...
Resources -> Integration Request
application/json
поле типа контента, даже если оно показывает значение по умолчанию (если вы не сделаете этого, оно не сохранится и не выдаст сообщение об ошибке)положить это в отображении ввода
{ "name": "$input.params('name')" }
установите флажок рядом с раскрывающимся списком шаблонов (я полагаю, что это, наконец, сохраняет его)
источник
Я использовал этот шаблон сопоставления для предоставления параметров строки, заголовка, метода, пути и URL-запроса в событие Lambda. Я написал сообщение в блоге, объясняющее шаблон более подробно: http://kennbrodhagen.net/2015/12/06/how-to-create-a-request-object-for-your-lambda-event-from-api- шлюз /
Вот шаблон отображения, который вы можете использовать:
источник
deploy
API снова не сделал . Как только я развернул API с новым отображением, все заработало. Благодаря тонну.В наши дни раскрывающийся шаблон включен в консоль API Gateway на AWS.
Для вашего API, нажмите на название ресурса ... затем GET
Разверните "Шаблоны картографии тела"
Введите
для Content-Type (должен быть явно напечатан) и нажмите галочку
Откроется новое окно со словами «Создать шаблон» и раскрывающийся список (см. Изображение).
Выбрать
Затем нажмите Сохранить
Чтобы получить доступ к любым переменным, просто используйте следующий синтаксис (это Python), например, URL:
Вы можете получить переменные следующим образом:
Таким образом, нет необходимости явно называть или отображать каждую переменную, которую вы хотите.
источник
Чтобы передать параметры в вашу лямбда-функцию, вам необходимо создать отображение между запросом API-шлюза и вашей лямбда-функцией. Сопоставление выполняется в разделе
Integration Request
->Mapping templates
выбранного ресурса шлюза API.Создайте отображение типа
application/json
, затем справа вы отредактируете (щелкните карандашом) шаблон.Шаблон отображения на самом деле является шаблоном Velocity, где вы можете использовать ifs, циклы и, конечно, печатать переменные на нем. В шаблон вводятся эти переменные, где вы можете получить доступ к параметрам строки запроса, заголовкам запроса и т. Д. По отдельности. С помощью следующего кода вы можете заново создать всю строку запроса:
Примечание: нажмите на значок галочки, чтобы сохранить шаблон. Вы можете проверить свои изменения с помощью кнопки «Тест» на вашем ресурсе. Но чтобы протестировать параметры строки запроса в консоли AWS, вам нужно определить имена параметров в
Method Request
разделе вашего ресурса.Примечание: обратитесь к Руководству пользователя Velocity для получения дополнительной информации о языке шаблонов Velocity.
Затем в своем лямбда-шаблоне вы можете сделать следующее, чтобы проанализировать строку запроса:
источник
Actions>Deploy API
(я потерял время, забывая об этом ...). Связанный лямбда-арн примет изменение сразу после развертывания. Вы можете проверить этоStages > #stage (like: prod) > Deployment History
.Принятый ответ работал хорошо для меня, но, расширив ответ Джименете, я хотел универсальный шаблон, который мог бы использовать для прохождения всех параметров запроса / пути / заголовка (так же, как строки на данный момент), и я пришел к следующему шаблону. Я публикую это здесь на случай, если кто-то посчитает это полезным:
источник
Как часть попытки ответить на один из моих собственных вопросов здесь , я столкнулся с этой уловкой.
В шаблоне сопоставления шлюза API используйте следующую команду, чтобы получить полную строку запроса, отправленную клиентом HTTP:
Преимущество заключается в том, что вам не нужно ограничивать себя набором предопределенных сопоставленных ключей в строке запроса. Теперь вы можете принять любые пары ключ-значение в строке запроса, если вы хотите именно так.
Примечание: В соответствии с этим , только
$input.params(x)
перечислен как переменная доступна для шаблона VTL. Возможно, что внутреннее устройство может измениться иquerystring
может больше не быть доступным.источник
Теперь вы должны иметь возможность использовать новый тип интеграции прокси для Lambda, чтобы автоматически получать полный запрос в стандартной форме, а не настраивать сопоставления.
см .: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-set-up-lambda-proxy-integration-on- прокси-ресурс
источник
GET / user? Name = bob
GET / пользователь / bob
источник
Здесь очень много ответов. Но я хотел что-то немного проще. Я хотел что-то, что будет работать с образцом "Hello World" бесплатно. Это означает, что я хотел, чтобы простое производило тело запроса, которое соответствует строке запроса:
Я думаю, что верхний ответ дает что-то более полезное при создании чего-то реального, но для быстрого запуска привет-мира с использованием шаблона от AWS это прекрасно работает.
источник
В следующем примере сопоставления параметров все параметры, включая путь, строку запроса и заголовок, передаются в конечную точку интеграции через полезную нагрузку JSON.
По сути, этот шаблон отображения выводит все параметры запроса в полезной нагрузке, как указано ниже:
Скопировано из Руководства разработчика по API Amazon Gateway
источник
Строка запроса проста для разбора в javascript в lambda
для GET / пользователя? name = bob
Это не решает вопрос GET user / bob.
источник
event.queryStringParameters.name
Как ответ @ Jonathan, после отметки « Использовать интеграцию Lambda Proxy в запросе на интеграцию» в исходном коде необходимо реализовать следующий формат, чтобы пропустить ошибку 502 Bad Gateway .
NodeJS 8.10:
Не забудьте развернуть свой ресурс в API Gateway, прежде чем перезапускать свой API. Ответ JSON просто вернет, какой набор в теле корректен. Таким образом, вы можете получить путь, параметр, заголовки, значение тела из события
источник
Функция Lambda ожидает ввод данных в формате JSON, поэтому необходимо выполнить синтаксический анализ строки запроса. Решение состоит в том, чтобы изменить строку запроса на JSON с помощью шаблона отображения.
Я использовал его для C # .NET Core, поэтому ожидаемым вводом должен быть JSON с параметром «queryStringParameters».
Для этого выполните следующие 4 шага:
application/json
контент-tyap:Скопируйте шаблон ниже, который анализирует строку запроса в JSON, и вставьте ее в шаблон отображения:
В API Gateway вызовите функцию Lambda и добавьте следующую строку запроса (для примера):
param1=111¶m2=222¶m3=333
Шаблон отображения должен создать вывод JSON ниже, который является вводом для вашей лямбда-функции.
Вы сделали С этого момента логика вашей лямбда-функции может использовать параметры строки запроса.
Удачи!
источник
Вы можете использовать Lambda в качестве «Lambda Proxy Integration» , см. Этот [ https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda. html # api-gateway-proxy -gration -lambda-function-python] , варианты, доступные для этой лямбды:
Для Nodejs Lambda «event.headers», «event.pathParameters», «event.body», «event.stageVariables» и «event.requestContext»
Для события Python Lambda ['headers'] ['имя_параметра'] и т. Д.
источник
См. Документ: https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html#api-as-lambda-proxy-expose-get-method-with -Path-параметры-к вызову лямбда-функции
Вам нужно изменить шаблон отображения
источник
Прочитав несколько из этих ответов, я использовал комбинацию из нескольких в августе 2018 года для получения параметров строки запроса через лямбду для python 3.6.
Сначала я зашёл в API Gateway -> Мой API -> ресурсы (слева) -> Запрос на интеграцию. Внизу внизу выберите Mapping Templates, а затем введите тип контента
application/json
.Затем выберите шаблон «Метод запроса», который предоставляет Amazon, и выберите «Сохранить и развернуть API».
Тогда лямбда
event['params']
- это то, как вы получаете доступ ко всем вашим параметрам. Для строки запроса:event['params']['querystring']
источник