b31c5eb7e943e1f4be76faf38c8ffe32886d62ac
SQS-service — Multi-Tenant Message Queue Service
Совместимый с AWS SQS сервис очередей сообщений с поддержкой нескольких изолированных тенантов, developed from GoAws.
Возможности
- AWS SQS API-совместимый — работает с AWS SDK без изменений кода
- Многотенантность — каждый тенант имеет отдельный Access Key и Secret Key
- Redis persistence — очереди и сообщения сохраняются при перезапуске сервиса
- Web UI Console — управление тенантами и просмотр сообщений
- Managed-ready — деплой Docker-образом через Nubes («Простой HTTP контейнер»), health-check /health
- Admin API — управление тенантами программно
Деплой (Nubes Managed)
Сервис деплоится как Docker-образ через «Простой HTTP контейнер» (deck-UI) + Managed Redis. Никакого Kubernetes/VPS.
1. Собрать и запушить образ в Gitea registry
docker build -t gitea.services.ngcloud.ru/nail/shared-sqs:v0.1.25 .
docker login gitea.services.ngcloud.ru -u ntazetdinov -p <токен>
docker push gitea.services.ngcloud.ru/nail/shared-sqs:v0.1.25
2. Создать контейнер в deck-UI
- Сервис: «Простой HTTP контейнер»
- Образ:
gitea.services.ngcloud.ru/nail/shared-sqs:v0.1.25 - Realm:
iot-naeel - Env (СРАЗУ, потом не меняются):
SHARED_SQS_ADMIN_TOKEN,REDIS_PASSWORD
Локальный запуск
go build -o shared-sqs ./app/cmd
./shared-sqs --port 4100
Архитектура
app/
├── cmd/ — точка входа
├── models/ — структуры данных (Queue, Message, Tenant)
├── gosqs/ — реализация SQS API
├── admin/ — Admin API (Create Tenant, Get Tenant и т.д.)
├── tenant/ — изоляция и авторизация по тенанту
├── auth/ — AWS Signature V4 верификация
├── persistence/ — Redis adapter
├── router/ — HTTP маршруты
└── ui/ — Web Console (HTML/JS)
deployments/k8s/ — ЛЕГАСИ (старый k8s-деплой, не использовать)
deployments/helm/ — ЛЕГАСИ (helm chart, не использовать)
Окружение
| Переменная | Значение | Описание |
|---|---|---|
PORT (--port) |
4100 | Порт HTTP сервера |
REDIS_ADDR |
host:6379 | Redis для persistence |
REDIS_USER |
default | Redis username |
REDIS_PASSWORD |
— | Redis password (секрет) |
SHARED_SQS_ADMIN_TOKEN |
— | Admin API bearer token (обязательный) |
SHARED_SQS_SEED_DEMO |
true/false | Загрузить demo данные на старте |
NUBES_ENDPOINT |
https://deck-api.ngcloud.ru/api/v1 | JWT-валидация UI |
API примеры
Создать очередь (как тенант)
curl -X POST "http://localhost:4100/" \
-H "Authorization: AWS4-HMAC-SHA256 Credential=SSAK-demo-shared-sqs/20260410/us-east-1/sqs/aws4_request" \
-d "Action=CreateQueue&QueueName=myqueue&Version=2012-11-05"
Отправить сообщение
aws sqs send-message \
--endpoint-url http://localhost:4100 \
--queue-url http://localhost:4100/demo-shared-sqs/myqueue \
--message-body "Hello World"
История
- v0.1.11 — Redis write-through persistence
- v0.1.13 — Фикс критического дедлока в CreateQueue
- v0.1.14 — Фикс UI (sent_at поле), TLS Ingress
Документация
- PLAN.md — ЛЕГАСИ, исторический план разработки
- doc/billing-and-metrics.md — биллинг и Prometheus-метрики
- doc/byoc-credentials.md — BYOC интеграция
Ссылки
- Репо: https://gitea.services.ngcloud.ru/Nail/SQS-service
- Registry: https://gitea.services.ngcloud.ru/nail/shared-sqs
- Основана на: GoAws
Languages
Go
71%
HTML
14.1%
Python
12.2%
Shell
2.4%
Dockerfile
0.2%
Other
0.1%