- infrastructure/overview.md: исправить S3 URL, Container Registry (DockerHub), namespace sless, Terraform Registry terra.k8c.ru - errors/log.md: добавить 3 ошибки — kaniko S3 scheme, бесконечный цикл сборки, docker credStore desktop.exe - decisions/log.md: добавить решения — DockerHub, terraform провайдер в той же репе, WaitReady паттерн, code_hash для версионирования кода - api/design.md: обновить базовый URL, добавить upload endpoint с описанием процесса, исправить runtime список
80 lines
4.2 KiB
Markdown
80 lines
4.2 KiB
Markdown
# Решения и обоснования
|
||
|
||
## 2026-03-06 — Отдельная репа для сервиса
|
||
|
||
**Решение:** Serverless service в отдельной репе, не вместе с Terraform provider.
|
||
|
||
**Причина:** Разные зоны ответственности, разные релизы, потенциально разные команды.
|
||
|
||
---
|
||
|
||
## 2026-03-06 — Один бинарник для v1
|
||
|
||
**Решение:** Один Go бинарник вместо микросервисов.
|
||
|
||
**Причина:** Нагрузки изначально нет. Проще деплоить, проще отлаживать. Разделим при необходимости.
|
||
|
||
---
|
||
|
||
## 2026-03-06 — Аутентификация через облачный токен
|
||
|
||
**Решение:** Использовать Bearer token облака, без Keycloak.
|
||
|
||
**Причина:** Terraform provider уже работает с токенами облака. Keycloak — лишняя зависимость для v1.
|
||
|
||
---
|
||
|
||
## 2026-03-06 — S3 облачный, остальное в кубере
|
||
|
||
**Решение:** S3 (Ceph) использовать облачный (`ceph.tst.nubes.ru`), PostgreSQL/Redis — в кластере.
|
||
|
||
**Причина:** S3 имеет внешний доступ и уже готов. Для PostgreSQL/Redis сетевого связывания с облаком пока нет — настраивается через devops облака.
|
||
|
||
---
|
||
|
||
## 2026-03-06 — Текущий кластер для разработки
|
||
|
||
**Решение:** Использовать существующий k8s кластер (namespace `sless`), потом перенести на новый.
|
||
|
||
**Причина:** Новый кластер ещё не готов. Изоляция через namespace — безопасно для существующих сервисов.
|
||
|
||
---
|
||
|
||
## 2026-03-06 — RabbitMQ откладываем
|
||
|
||
**Решение:** В v1 только HTTP и Cron триггеры. RabbitMQ/event triggers — в v2.
|
||
|
||
**Причина:** Упрощение первой итерации.
|
||
|
||
---
|
||
|
||
## 2026-03-07 — DockerHub вместо внутреннего registry
|
||
|
||
**Решение:** Образы функций и runtime базовые образы публикуются на DockerHub (user `naeel`).
|
||
|
||
**Причина:** Namespace `registry` в кластере — это Apache NiFi Registry (NOT Docker). Отдельный Docker registry не поднят. DockerHub доступен и достаточен для разработки.
|
||
|
||
---
|
||
|
||
## 2026-03-07 — Terraform провайдер sless — отдельный модуль в той же репе
|
||
|
||
**Решение:** `terraform/provider/` — независимый Go-модуль внутри репы `sless`.
|
||
|
||
**Причина:** Удобно держать рядом. Код провайдера писался с прицелом на перенос в nubes провайдер (`/home/naeel/remote_dev/terraform`). Клиент (`internal/client/`) → `internal/core/` nubes, ресурсы → `internal/resources_gen/`.
|
||
|
||
---
|
||
|
||
## 2026-03-07 — WaitReady в Terraform провайдере при создании функции
|
||
|
||
**Решение:** После `UploadCode` провайдер ждёт `phase=Ready` (polling каждые 5 сек, таймаут 5 мин).
|
||
|
||
**Причина:** Kaniko-сборка занимает ~1 минуту. Без ожидания `terraform apply` завершился бы с `phase=Building` в state, что неверно отображало бы реальное состояние ресурса.
|
||
|
||
---
|
||
|
||
## 2026-03-07 — code_hash для детектирования изменений кода функции
|
||
|
||
**Решение:** Атрибут `code_hash` в `sless_function` — пользователь задаёт через `filemd5("./handler.zip")`. Изменение hash → провайдер перезагружает zip и запускает пересборку.
|
||
|
||
**Причина:** Terraform не отслеживает содержимое файлов автоматически. Это стандартный паттерн (аналогично `aws_lambda_function.source_code_hash`).
|