Развертывание сервиса на основе Docker-образа с FastAPI
В этом практическом руководстве вы развернете сервис FastAPI на основе Docker-образа. Сервис передает метрики в текстовом формате Prometheus0.0.0.0
и порте 9875
.
Чтобы развернуть сервис на основе Docker-образа с FastAPI:
- Подготовьте инфраструктуру.
- Подготовьте Docker-образ для развертывания сервиса.
- Разверните сервис в DataSphere.
- Проверьте работу развернутого сервиса.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Перед началом работы нужно зарегистрироваться в Yandex Cloud, настроить сообщество и привязать к нему платежный аккаунт:
- На главной странице DataSphere
нажмите Попробовать бесплатно и выберите аккаунт для входа — Яндекс ID или рабочий аккаунт в федерации (SSO). - Выберите организацию Yandex Cloud Organization, в которой вы будете работать в Yandex Cloud.
- Создайте сообщество.
- Привяжите платежный аккаунт к сообществу DataSphere, в котором вы будете работать. Убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его в интерфейсе DataSphere.
Необходимые платные ресурсы
В стоимость развертывания сервиса на основе Docker-образа входят:
- плата за постоянно запущенные инстансы ноды (см. тарифы DataSphere);
- плата за запуск ячеек с кодом для проверки работы развернутого сервиса;
- объем хранилища, занятый данными Yandex Container Registry (см. тарифы Container Registry).
Подготовьте инфраструктуру
Войдите в консоль управления
Если у вас есть активный платежный аккаунт, на странице облака
Примечание
Если вы работаете с Yandex Cloud через федерацию удостоверений, вам может быть недоступна платежная информация. В этом случае обратитесь к администратору вашей организации в Yandex Cloud.
Создайте каталог
Примечание
В примере инфраструктура Yandex Cloud и развернутый сервис работают в одном каталоге Yandex Cloud, однако это не обязательно.
- В консоли управления
выберите облако и нажмите кнопку Создать каталог. - Введите имя каталога, например
data-folder
. - Нажмите кнопку Создать.
Создайте реестр Container Registry
DataSphere может создать ноду из Docker-образа, который хранится в Yandex Container Registry. Чтобы загрузить образ, создайте реестр:
- Перейдите в каталог
data-folder
. - В списке сервисов выберите Container Registry.
- Нажмите кнопку Создать реестр.
- Задайте имя реестра, например
datasphere-registry
, и нажмите кнопку Создать реестр.
Создайте сервисный аккаунт для проекта DataSphere
-
Перейдите в каталог
data-folder
. -
В списке сервисов выберите Identity and Access Management.
-
Нажмите кнопку Создать сервисный аккаунт.
-
Введите имя сервисного аккаунта, например
sa-for-datasphere
. -
Нажмите Добавить роль и назначьте сервисному аккаунту роли:
container-registry.images.puller
— чтобы разрешить DataSphere скачивать ваш Docker-образ для создания ноды.vpc.user
— для работы с сетью DataSphere.datasphere.user
— чтобы отправлять запросы в ноду.
-
Нажмите кнопку Создать.
Создайте авторизованный ключ для сервисного аккаунта
Чтобы сервисный аккаунт мог аутентифицироваться в Yandex Container Registry, создайте авторизованный ключ.
Примечание
Срок жизни авторизованных ключей не ограничен, но вы всегда можете получить новые авторизованные ключи и повторить процедуру аутентификации, если что-то пошло не так.
-
Перейдите в каталог
data-folder
. -
В списке сервисов выберите Identity and Access Management.
-
На панели слева выберите
Сервисные аккаунты. -
В открывшемся списке выберите сервисный аккаунт
sa-for-datasphere
. -
Нажмите кнопку Создать новый ключ на верхней панели.
-
Выберите пункт Создать авторизованный ключ.
-
Выберите алгоритм шифрования.
-
Сохраните открытый и закрытый ключи: закрытый ключ не сохраняется в Yandex Cloud, открытый ключ нельзя будет посмотреть в консоли управления.
Совет
Вы можете сохранить файл с ключом на свой компьютер. Его содержимое понадобится позднее при создании секрета для доступа DataSphere в Container Registry.
Подготовьте Docker-образ для развертывания сервиса
Если у вас еще нет Docker, установите
Создайте Docker-образ сервиса
-
Создайте папку, в которой будет храниться конфигурация Docker-образа и все необходимые файлы, например
/home/docker-images
. -
Склонируйте репозиторий на GitHub
и поместите файлы в созданную папку. -
Запустите Docker Desktop
. -
В командной оболочке перейдите в папку, где хранится созданный вами Dockerfile.
cd docker-images
-
Соберите Docker-образ:
docker build --platform linux/amd64 -t fastapi-docker .
Загрузите Docker-образ в Container Registry
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
-
Задайте каталог
data-folder
каталогом по умолчанию:yc config set folder-id <идентификатор_каталога>
-
Аутентифицируйтесь в Container Registry.
- Получите IAM-токен для своего пользовательского аккаунта:
yc iam create-token
В ответе будет IAM-токен. Если вы аутентифицируетесь от имени федеративного аккаунта, CLI перенаправит вас в консоль управления для аутентификации, а после этого пришлет IAM-токен.
Примечание
У IAM-токена короткое время жизни — не более 12 часов. Поэтому такой способ подойдет для приложений, которые будут запрашивать IAM-токен автоматически.
- Выполните команду, подставив вместо
<IAM-токен>
значение токена, которое вы получили на предыдущем шаге:
docker login \ --username iam \ --password <IAM-токен> \ cr.yandex
-
Получите список реестров каталога
data-folder
:yc container registry list
Идентификатор реестра понадобится вам на следующем шаге. Пример вывода команды:
+----------------------+---------------------+----------------------+ | ID | NAME | FOLDER ID | +----------------------+---------------------+----------------------+ | crp86bmgl1da******** | datasphere-registry | b1g4bh24c406******** | +----------------------+---------------------+----------------------+
-
Загрузите Docker-образ в Container Registry, подставив идентификатор вашего реестра
datasphere-registry
:docker tag fastapi-docker cr.yandex/<идентификатор_реестра>/fastapi:v1 docker push cr.yandex/<идентификатор_реестра>/fastapi:v1
Разверните сервис в DataSphere
-
Откройте главную страницу
DataSphere. На панели слева выберите Сообщества. - Выберите сообщество с привязанным платежным аккаунтом.
- Создайте проект
Node from Docker
. - В настройках проекта укажите:
- Каталог по умолчанию —
data-folder
. - Сервисный аккаунт —
sa-for-datasphere
.
- Каталог по умолчанию —
- Создайте секрет
key-for-sa
, хранящий полное содержимое файла с авторизованным ключом для сервисного аккаунтаsa-for-datasphere
. - Создайте ноду. Для этого на странице проекта в правом верхнем углу нажмите кнопку Создать ресурс. Во всплывающем окне выберите Нода. Укажите настройки ноды:
- В поле Имя введите имя ноды —
fastapi
. - В блоке Образ Docker:
- Тип — выберите Docker-образ.
- Хранилище Docker-образов — выберите Yandex Container Registry.
- Путь к образу — задайте путь к образу Container Registry вида
cr.yandex/<идентификатор_реестра>/<имя_образа>:<тег>
. Его можно получить в консоли управления, скопировав полное значение на странице репозитория. Также вы можете заполнить поле вручную. Идентификатор реестра можно получить в CLI, выполнив командуyc container registry list
. - Секрет с паролем — выберите
key-for-sa
.
- В блоке Эндпоинт:
- Тип — выберите протокол HTTP.
- Порт — 9875.
- Включите опцию Телеметрия и укажите:
- Тип — выберите Prometheus.
- HTTP-адрес —
/metrics
. - Порт — 9875.
- Включите опцию Проверка и укажите:
- Тип — выберите HTTP.
- Путь —
0.0.0.0
. - Порт — 9875.
- Таймаут — 1.
- Интервал — 15.
- Неудачные проверки — 3.
- Пройденные проверки — 3.
- В блоке Каталог выберите каталог
data-folder
. - В блоке Обеспечение выберите конфигурацию
g1.1
. - Нажмите кнопку Создать.
- В поле Имя введите имя ноды —
Проверьте работу развернутого сервиса
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. -
В списке ресурсов выберите Нода.
-
Нажмите на созданную ноду
Node from Docker
. -
Перейдите на вкладку Запрос.
-
В форме Создать тестовый запрос выберите метод
GET
. -
В поле Path введите
/urls
. -
Нажмите кнопку Выполнить, чтобы получить полный список URI для проверки работоспособности и метрик.
Результат:
[ { "path": "/openapi.json", "name": "openapi" }, { "path": "/docs", "name": "swagger_ui_html" }, { "path": "/docs/oauth2-redirect", "name": "swagger_ui_redirect" }, { "path": "/redoc", "name": "redoc_html" }, { "path": "/metrics", "name": "metrics" }, { "path": "/", "name": "root" }, { "path": "/urls", "name": "get_all_urls" }, { "path": "/health-check", "name": "healthcheck" } ]
Как удалить созданные ресурсы
При развертывании и эксплуатации моделей вы платите за время работы каждого инстанса ноды — от момента запуска до момента удаления.
Если развернутый сервис вам больше не нужен, удалите ноду.
- Удалите ноду.
- Удалите секрет.
- Удалите авторизованный ключ сервисного аккаунта.
- Удалите Docker-образ.
- Удалите реестр Container Registry.