category задаёт расписание и поведение по умолчанию.
Никакой обвязки параметров — их передаёт платформа.
Категория задаёт поведение
📥
ingest
Затягивает внешние данные в каталог. По умолчанию — ночью.
🧮
preparation
Выводит продукты из данных каталога. Запускается после ingest.
📊
compute
Аналитика с результатами — по требованию или по расписанию.
Выбрал категорию — разумное расписание и публикация уже настроены.
SDK — это просто переменные окружения
import os, json
params = json.loads(os.environ["UPROJ_PARAMS"])
bbox = params["bbox"]
# read inputs straight from object storage via GDAL
src = "/vsis3/inputs/s2-l2a/.../red.tif"
# where to write + how to call back
out_dir = os.environ["UPROJ_OUTPUT_DIR"]
api = os.environ["UPROJ_API_URL"]
token = os.environ["UPROJ_SERVICE_TOKEN"]
Параметры приходят как JSON — без фреймворка парсинга.
Растры читаются на месте из хранилища — без скачивания.
Короткоживущий токен авторизует вызовы каталога.
Обычный Python — любые библиотеки на ваш вкус.
Разбор — ingest-скрипт
# 1. search the source for new scenes in the window
scenes = search(bbox, since=window_start)
# 2. mirror each asset into the catalog's storage
for s in scenes:
for asset in s.assets:
copy_to_storage(asset.url, key=object_key(s, asset))
# 3. register the scene as a catalog item
register_item(stac_item(s))
Поиск → зеркалирование → регистрация. Это ingest.
Уже зеркалированные сцены пропускаются — перезапуск дёшев.
Задал дату старта — бэкфилл; дальше катится вперёд по ночам.
Разбор — preprocess-скрипт
# read bands in place, compute the index
red = read("/vsis3/inputs/s2-l2a/.../red.tif")
nir = read("/vsis3/inputs/s2-l2a/.../nir.tif")
ndvi = (nir - red) / (nir + red)
# write a cloud-optimized GeoTIFF + register it
write_cog(ndvi, f"{out_dir}/ndvi.tif")
register_item(stac_item("s2-ndvi", scene_id))
Читает исходники из хранилища, пишет COG.
Публикует обратно в каталог как новый продукт.
Тот же шаблон для любого индекса, маски или композита.
Загрузка — авто-версионирование
Каждая загрузка — новая иммутабельная версия; в проде ничего не ломается.
Джоба и расписание
Выбрал процесс, заполнил форму (дефолты уже стоят), добавил cron — готово.
05
Платформа в работе
Каталог — все входные данные
Входы и результаты в одном браузере с поиском и пагинацией.
Карта и анализ
Любую сцену или результат — на интерактивной карте.
Джобы — конфигурации + расписание
Каждая джоба: процесс, параметры, опциональный cron, кнопка запуска.
Запуски — всё под контролем
Состояние, логи и результат в каталоге для каждого запуска.
Секреты — шифрованные, по владельцу
Креды хранятся шифрованно, привязаны ко входу процесса, не отдаются обратно.
Панель операций
Контейнеры, диск и последние запуски — оператору с одного взгляда.
Настройки — на лету, без рестарта
Лимиты, доступ и категории из UI; изменения применяются сразу.
Пользователи и доступ
Идентичность на OIDC — админы и пользователи, настоящий ролевой доступ.
06
Эксплуатация и доверие
Безопасность по слоям
🧱
Песочница запусков
Урезанные контейнеры — без привилегий, с лимитами и таймаутом.
🔑
Scoped-хранилище
Каждый запуск видит только свои данные, ничего больше.
🌐
Сетевая изоляция
Запуски не видят БД и auth; исходящий трафик опционален и по allow-list.
👤
Идентичность и RBAC
OIDC-вход, API-токены, админ vs пользователь — настоящий контроль доступа.
Эксплуатация без сюрпризов
📊
Наблюдаемость
Структурные логи, статистика на запуск, дашборд оператора.
💾
Бэкапы
Дамп БД и инвентаризация хранилища — одной командой.
⬆️
Установка и обновление
Установка и обновление — по одной команде, без ручных шагов.
07
Почему uproj
Не ноутбук. Не облачный счёт.
📓
против ноутбуков
Повторяемо, по расписанию, с каталогом, многопользовательски — не разовый скрипт.
☁️
против облачных SaaS
On-prem и суверенно — без egress-платы за сцену, на вашем железе.
🧩
Расширяемо
Любой новый источник или аналитика — просто Python, тот же контракт.
Куда движемся дальше
🛡️
Жёстче egress
Декларативные allow-list исходящего трафика на процесс.
📈
Стек наблюдаемости
Опциональные метрики и дашборды для крупных развёртываний.
⚡
GPU-вычисления
Тяжёлая аналитика на ускоренных рантаймах.
Давайте сделаем
Ваши данные, ваши серверы, ваши аналитики — в проде на следующей неделе.