Работа с Amazon API Gateway
Функцию AWS Lambda можно вызвать на HTTPSURL. Это можно сделать с помощью GET, POST, PUT. Когда вызывается URL-адрес HTTPS, также может срабатывать функция AWS Lambda и данные передаются в HTTPS с использованиемget/post могут быть доступны внутри AWS Lambda для использования для вставки в DynamoDB или для отправки почты и т. д.
В этой главе подробно рассматриваются различные процессы, участвующие в работе с AWS lambda и API Gateway.
Вовлеченные процессы
Ниже приведены процессы, связанные с работой с AWS lambda и API Gateway.
- Создать роль IAM для разрешения
- Создать лямбда-функцию AWS
- Создать API-шлюз
- Связывание лямбда-функции со шлюзом API
- Передача данных в API-шлюз
Базовая диаграмма, которая объясняет работу шлюза API и AWS Lambda, приведена здесь -

Эти процессы подробно объясняются далее в этой главе с соответствующими снимками экрана.
Создать роль IAM для разрешения
В сервисах Amazon, как показано ниже, выберите IAM для создания ролей, которые будут использоваться функцией Lambda.

Перейдите в IAM и выберите Roles из левой части, как показано ниже -

Нажмите Create role для лямбда-функции.

Выберите Lambda и нажмите Permissionsвнизу. Выберите разрешение, необходимое для API Gateway и Lambda.

Найдите шлюз API в поиске, и он перечислит вам все соответствующие разрешения. Здесь мы выбрали полный доступ к шлюзу API, как показано ниже -

Теперь найдите шлюз API, и он перечислит вам все соответствующие разрешения. Здесь мы выбрали полный доступ к шлюзу API, как показано ниже -

Вы также должны повторить тот же процесс для политик.

Когда вы закончите выбор необходимых политик, нажмите Reviewдля следующего шага. Введите название роли по вашему выбору, как показано ниже -

Он отображает политики, привязанные к роли. НажмитеCreate role и мы закончили с созданием роли и можем продолжить лямбда-функцию.
Создать функцию AWS Lambda
Перейдите в сервисы AWS и щелкните лямбда-сервис, чтобы создать функцию для его подключения к шлюзу API.

Экран пользовательского интерфейса для лямбда-функции показан ниже. НажмитеCreate function кнопку, чтобы продолжить создание лямбда-функции.

Введите имя функции и выберите существующую роль, которую мы создали выше.

Мигает сообщение, что функция с названием lambdawithapigateway создан успешно.

Обратите внимание, что здесь мы будем использовать nodejsвремя выполнения для написания кода. Код AWS сhelloworld сообщение, как показано ниже -

Код AWS Lambda присутствует в index.jsфайл. Функция, называемая обработчиком, имеет параметры, а именноevents, context а также callback.
Функция обратного вызова в основном содержит сообщение об ошибке и сообщение об успехе. Обратите внимание, что здесь у нас нет кода, связанного с ошибкой, поэтому передается null и отображается сообщение об успешном завершении.HelloWorld from lambda.
Наконец, сохраните добавленные изменения и давайте приступим к добавлению функции Lambda в шлюз API.
Создать API-шлюз
Войдите в свою учетную запись AWS и откройте API Gateway, как показано ниже -

Нажмите API Gateway, и вы попадете на экран, где можно создать новый API-шлюз.

Нажмите Create API и добавьте детали, как показано ниже -

Щелкните значок Create APIкнопку в правой части экрана. Это отобразит недавно созданный API в левой части экрана.

Щелкните значок Actions раскрывающийся список, чтобы создать новый ресурс для API.

Теперь создайте новый ресурс, как показано ниже -

Введите Resource Nameкак показано ниже. Вы увидите имя ресурса, введенное в URL-адрес, созданный в конце. НажмитеCreate Resource и вы увидите это на экране следующим образом -


Добавить GET/POSTметоды к ресурсу, созданному, как показано ниже. Выберите метод изActions падать.

Щелкните значок GET для добавления метода в API.

Следующим шагом является интеграция, которая объединит его с функцией Lambda. Теперь добавьте к нему функцию Lambda, как показано ниже -

Связывание лямбда-функции со шлюзом API
Выберите лямбда-функцию, созданную ранее.

Сохраните изменения, и вы увидите диалоговое окно с запросом разрешения, как показано ниже -

Нажмите OKдля разрешения. Это детали выполнения между HTTP-запросом шлюза API и функцией Lambda -

Теперь давайте развернем изменения шлюза API. Для этого нам нужно выбратьDeploy API из Actions раскрывающийся список, как показано ниже -

Выбрать Deploy API. Он запросит состояние развертывания. ВыбратьNew Stage из раскрывающегося списка этапа развертывания и добавьте название этапа как Production.

Нажмите Deploy кнопку, и он перенаправит вас на URL-адрес, как показано ниже -

Выберите GETметод слева, чтобы получить URL-адрес. Откройте URL-адрес в новой вкладке, чтобы увидеть сообщение от функции Lambda.

Это базовый пример работы с AWS Lambda и AWS API Gateway. В приведенном выше примере мы жестко запрограммировали сообщение в лямбда-функции.
Теперь давайте возьмем детали сообщения из API Gateway. В случае, если вызов HTTPS должен быть вызван из другого домена, например, вызов AJAX для API, нам нужно включить CORS для созданного шлюза API.
Выберите ресурс, созданный для API, и нажмите Actions раскрывающийся список -

Сейчас же, Enable CORS откроется следующий экран -

Вы можете использовать несколько методов для ВКЛЮЧЕНИЯ CORS. Access-Control-Allow-Origin отмечен знаком *, что означает, что он позволит получать содержимое из шлюза API из любого домена.
Вы также можете указать доменное имя, с которым хотите работать с API. НажмитеEnable CORS and replace existing CORS headers кнопку и отобразит подтверждающее сообщение, как показано ниже -

Нажмите Yes, replace existing valuesкнопку, чтобы включить его. ВEnable CORS экран выглядит как показано ниже -

Передача данных в API-шлюз
Откройте API, созданный в API Gateway displayhelloworld как показано ниже -

Нажмите Integration Request для отправки данных, как показано ниже -

выбирать Body Mapping Templates и добавить Content-Type для этого примера как application/json. Нажмите на добавленный тип контента, добавьте детали следующим образом -

Теперь добавьте шаблон в формате JSON, как показано ниже -

Обратите внимание, что мы использовали сообщение в качестве параметра для получения данных из API Gateway и обмена ими с AWS Lambda. Синтаксис для получения подробностей показан выше.
Теперь разверните API, чтобы изменения были доступны в URL-адресе шлюза API. Для этого нам нужно изменить функцию Lambda для отображения данных на основе URL-адреса шлюза API. Код для лямбда-функции приведен ниже. Обратите внимание, что мы берем сообщение от события и переходим к обратному вызову.
exports.handler = (event, context, callback) => {
let message = event.message;
callback(null, message);
};
Теперь сохраните изменения в Lambda и нажмите URL-адрес, чтобы увидеть изменения. Обратите внимание на снимок экрана, приведенный ниже -

Щелкните URL-адрес, как показано ниже -
https://rw2ek1xung.execute-api.us-east-
1.amazonaws.com/prod/hello?message=hello%20from%20api%20gateway
Обратите внимание, что здесь мы передаем сообщение в виде строки запроса на URL-адрес GET. Затем вы можете наблюдать результат, как показано ниже -

Он считывает сведения, отправленные в сообщение с URL-адреса, и отображает их в браузере.