Несколько слов о бессерверных

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

Однако бессерверные архитектуры не всегда являются солнечным светом, радугой и единорогами. Они плохо подходят для долго работающих приложений, могут быть сложными в настройке и не обеспечивают такой же гибкости, как контейнерные архитектуры. Но даже с учетом этих подводных камней я бы сказал, что преимущества для многих (хотя и не для всех) приложений перевешивают затраты.

В этом посте мы развернем простую модель с помощью интерфейса командной строки Serverless Framework. Serverless CLI — это инструмент командной строки, который помогает облегчить некоторые проблемы, связанные с настройкой бессерверного приложения с помощью вашего облачного провайдера. В этом случае мы будем использовать Serverless, чтобы помочь с развертыванием на AWS.

Обзор

Мы обучим простой классификатор цветов ириса, который будет развернут как REST API с Serverless Framework. Когда все будет сказано и сделано, архитектура будет выглядеть примерно так.

Вам нужно будет установить Serverless CLI и создать учетную запись AWS, если у вас ее еще нет.

Прежде чем мы углубимся, весь код, обсуждаемый в этом посте, доступен в этом репозитории.

Модель

Модель, которую мы будем развертывать, — это всегда классический классификатор Iris.

Давайте настроим виртуальную среду, чтобы мы могли начать создавать нашу модель.

Поскольку основное внимание в статье уделяется бессерверному развертыванию, я не буду вдаваться в фактическое создание модели. Это простой готовый классификатор случайного леса от scikit-learn. Если вам интересно увидеть этот код, загляните в этот блокнот. Конечным результатом является подготовленная модель, которую мы можем загрузить для использования в качестве классификатора.

Развертывание

Теперь, когда модель сохранена, мы можем приступить к настройке развертывания с помощью интерфейса командной строки Serverless Framework. Нам нужно добавить дополнительный плагин Serverless, чтобы помочь с упаковкой наших библиотек Python. Для правильной работы плагина на вашем компьютере должен быть установлен Docker (плагин использует docker для упаковки всех требований, чтобы они без проблем работали с Lambda).

$ npm init
$ npm install --save serverless-python-requirements

Чтобы сообщить Serverless, как развернуть нашу модель на AWS, нам нужно определить файл serverless.yml.

Несколько вещей происходят в файле serverless.yml

  1. Мы определяем поставщика, этап и среду выполнения.
  2. Сообщите serverless, что мы хотим использовать плагин serverless-python-requirements для развертывания пакетов, которые мы определили в файле requirements.txt.
  3. Включите только те файлы, которые имеют отношение к развертыванию функции Lambda (handler.py, requirements.txt и все в каталоге model/).
  4. Укажите, какие функции Lambda мы хотим связать с какими конечными точками Api Gateway.

Вот и все! Теперь мы можем развернуть приложение.

$ sls deploy

Вы должны увидеть вывод, подобный следующему.

Serverless: Installing requirements of requirements.txt in .serverless...
Serverless: Docker Image: lambci/lambda:build-python3.6
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Injecting required Python packages to package...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (54.16 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
....................
Serverless: Stack update finished...
Service Information
service: serverless-iris-api
stage: dev
region: us-east-1
stack: serverless-iris-api-dev
api keys:
  None
endpoints:
  GET - https://e658ykxkhg.execute-api.us-east-1.amazonaws.com/dev/status
  POST - https://e658ykxkhg.execute-api.us-east-1.amazonaws.com/dev/predict
functions:
  iris-status: serverless-iris-api-dev-iris-status
  iris-predict: serverless-iris-api-dev-iris-predict
Serverless: Removing old service artifacts from S3...

Теперь давайте проверим конечные точки, чтобы убедиться, что они работают.

$ curl https://e658ykxkhg.execute-api.us-east-1.amazonaws.com/dev/status

Вы должны получить наш ответ статуса.

{“message”: “Good to go!”}

И для конечной точки прогнозирования мы тестируем массив признаков X = [3.3, 4.1, 5.3, 1.9].

$ curl -d '{"X": [3.3, 4.1, 5.3, 1.9]}' -H "Content-Type: application/json" -X POST https://e658ykxkhg.execute-api.us-east-1.amazonaws.com/dev/predict

Мы получаем обратно наше предсказание Ирис

{"label": "virginica", "input": [3.3, 4.1, 5.3, 1.9]}