Зачем вам нужен Apache APISIX при использовании Amazon Lambda
Xiaolan Cheng
December 9, 2022
Serverless и Amazon Lambda
Что такое Serverless?
Serverless computing, или просто serverless, — это популярный тренд на современном рынке программного обеспечения. Все больше компаний мигрируют свои операции с традиционной серверно-ориентированной архитектуры на более быструю и экономически эффективную serverless-архитектуру.
Serverless-архитектура — это способ создания и запуска приложений без необходимости управления инфраструктурой. Она развертывает необходимую инфраструктуру в облачных провайдерах или на некоторых самостоятельно развернутых serverless-платформах для управления. Таким образом, инженеры могут сосредоточиться на бизнес-логике приложения, не тратя много усилий на создание, управление и масштабирование инфраструктуры. Крупнейшие облачные провайдеры (Amazon Web Services, Microsoft Azure и Google Cloud) проявляют огромный интерес к предоставлению лучших serverless-услуг. Например, Amazon Lambda — это основная serverless-вычислительная услуга для AWS (Amazon Web Services).
Как показано на рисунке ниже, в отличие от традиционного метода развертывания, используя Amazon Lambda, вам нужно только загрузить исходный файл, выбрать среду выполнения и выполнить его. Затем вы можете получить результат операции. Освобождая себя от шагов загрузки и компиляции на сервере. В этом процессе развертывание сервера, установка среды выполнения и компиляция управляются и выполняются платформой Amazon Serverless computing. Инженерам нужно только поддерживать свой исходный код и соответствующую конфигурацию среды выполнения.
Технология, связанная с этим, называется BaaS (Backend as a Service), что означает, что мы больше не пишем и не управляем серверными компонентами и полностью передаем на аутсорсинг все части приложения. Serverless — это новая среда хостинга, в которой выполняется код.

Зачем нам нужен Serverless?
Serverless имеет несколько преимуществ:
- Для разработчиков serverless более дружелюбен. Он может абстрагировать детали управления сервером, позволяя инженерам сосредоточиться на самом бизнес-коде.
- С точки зрения затрат serverless работает по принципу оплаты за использование.
- С точки зрения производительности, он может автоматически масштабироваться в зависимости от трафика запросов.
- Он также может оптимизировать выполнение кода и время отклика, регулируя объем памяти, выделенной для функции.
Зачем нам нужен API Gateway при использовании Serverless?
Serverless также имеет свои недостатки:
- URL функции жестко закодирован в приложении.
- Громоздкая логика авторизации и аутентификации.
- Высокая зависимость от облачного провайдера: если облачный провайдер недоступен, сервис также недоступен.
- У разных облачных провайдеров очень разные схемы, и нет конкретных стандартов, поэтому миграция с одного на другой обычно обходится дорого.
API Gateways могут решить эти проблемы по своей природе. В сочетании с serverless они могут стать надежной архитектурой. На рисунке ниже описано, как быстро собрать простой веб-сервис с использованием Amazon Serverless services. API gateway играет важную роль в предоставлении авторизации, определении маршрутов и проксировании запросов. В качестве примера можно привести Apache APISIX, который предлагает поддержку serverless для AWS и Azure. Вы можете определить маршрут для включения serverless-плагина вместо жесткого кодирования URL-адресов функций в приложениях. С гибкостью горячего обновления URI функций обновление до разных FaaS (Function as a service) облачных сервисов становится легким. Более того, этот подход облегчает боль от громоздкой авторизации и аутентификации.

Apache APISIX
Apache APISIX — это облачный API-шлюз под эгидой Apache Software Foundation (ASF). Будучи динамичным, работающим в реальном времени и высокопроизводительным, APISIX предоставляет такие функции, как балансировка нагрузки, динамический апстрим, канареечное развертывание, разрыв цепи, аутентификация и наблюдаемость. Мы можем использовать Apache APISIX для обработки традиционного трафика между сервисами (север-юг и восток-запад). В то же время он также может использоваться как K8s Ingress Controller. APISIX расширяет свою экосистему через встроенные плагины, охватывая различные сценарии использования API-шлюзов, такие как аутентификация, безопасность, наблюдаемость, управление трафиком, доступ к множеству протоколов и т.д. Конечно, он также включает множество плагинов, связанных с serverless.
aws-lambda plugin
Плагин aws-lambda интегрирует AWS Lambda с APISIX в качестве динамического апстрима для проксирования всех запросов для определенного URI в облако AWS. При включении плагин завершает текущий запрос настроенного URI и инициирует новый запрос к URI шлюза AWS Lambda от имени клиента. Этот новый запрос несет ранее настроенные данные авторизации, включая заголовки запроса, тело и параметры (все три передаются из исходного запроса). Он возвращает ответ с заголовками, кодом состояния и телом клиенту, который инициировал запрос через APISIX. Этот плагин поддерживает авторизацию через ключ API AWS и секреты AWS IAM.
Для получения дополнительной информации обратитесь к APISIX или этому блогу.
Serverless-плагины в Apache APISIX
Помимо Amazon Lambda, Apache APISIX также поддерживает интеграцию с serverless-экосистемами, такими как Azure Function, Lua function и Apache OpenWhisk, и предоставляет соответствующие serverless-плагины.
Таблица 1 Serverless-плагины Apache APISIX
| Название плагина | Описание |
|---|---|
| serverless | Пользователи могут загружать пользовательские Lua-скрипты через плагин serverless и указывать фазу выполнения кода в соответствии с конфигурацией. Например, выполнять контроль доступа к запросам на фазе доступа, изменять заголовок ответа или тело ответа на фазах фильтрации заголовков и тела, печатать персонализированные логи на фазе логирования и т.д. Также, поскольку плагин serverless поддерживает горячую перезагрузку, изменения могут вступать в силу немедленно без перезапуска Apache APISIX. |
| azure-functions | Используется для интеграции APISIX с Azure Serverless Function в качестве динамического апстрима для проксирования всех запросов для определенного URI в облако Microsoft Azure. При включении плагин azure-functions завершает текущий запрос к настроенному URI и инициирует новый запрос к Azure Functions от имени клиента. Новый запрос несет ранее настроенные данные авторизации, включая заголовок запроса, тело и параметры (все три передаются из исходного запроса). Затем он возвращает ответ с заголовками, кодом состояния и телом клиенту, который инициировал запрос через APISIX. |
| openwhisk | Используется для интеграции APISIX с открытой распределенной serverless-платформой Apache OpenWhisk. При включении плагин завершает текущий запрос к настроенному URI и инициирует новый запрос к конечной точке API Host OpenWhisk от имени клиента, и плагин openwhisk возвращает информацию о ответе клиенту. |
| openfunction | Используется для интеграции APISIX с открытой распределенной serverless-платформой CNCF OpenFunction в качестве динамического апстрима. При включении плагин завершает текущий запрос для настроенного URI и инициирует новый запрос к функции OpenFunction от имени клиента, а затем плагин openfunction возвращает информацию о ответе клиенту. |

Заключение
В последние годы с появлением микросервисной архитектуры все мигрирует в облако, и многие облачные провайдеры также запускают serverless-продукты. Разработка на основе serverless стала очень удобной моделью разработки. Следуя облачным трендам, APISIX поддерживает serverless-вычисления, предоставляя плагины serverless, azure-functions, openwhisk и openfunction.
Если вы хотите узнать больше об API-шлюзе и его serverless-функциях, свяжитесь с нами по адресу https://api7.ai/contact.