ExtendDB — независимый проект с открытым исходным кодом, управляемый Amazon Web Services. Это не Amazon DynamoDB, и он не содержит никакого исходного кода DynamoDB. «DynamoDB» — товарный знак Amazon.com, Inc. ExtendDB — это реализация с нуля (clean-room implementation), реализующая проводной протокол (wire protocol) DynamoDB. Отличия в поведении от реального сервиса задокументированы в Differences from DynamoDB.
ExtendDB — адаптер API, совместимый с DynamoDB: он говорит на проводном протоколе DynamoDB, поэтому любой AWS SDK, CLI или инструмент, работающий с DynamoDB, будет работать с ExtendDB без каких-либо изменений.
Сценарии использования
-
Локальная разработка — запускайте рабочие нагрузки DynamoDB на своём ноутбуке без какой-либо зависимости от облака.
-
CI/CD-конвейеры — детерминированные интеграционные тесты против DynamoDB-совместимого бэкенда.
-
Самостоятельное развёртывание — запускайте рабочие нагрузки DynamoDB на собственной инфраструктуре (on-premises, частное облако, граничные узлы).
-
Мультиоблако — используйте семантику DynamoDB на любом облаке, где работает PostgreSQL.
-
Изолированные среды (air-gapped) — функциональность DynamoDB без доступа к интернету.
Возможности
-
Полная поддержка проводного протокола DynamoDB: CRUD, Query, Scan, Batch, транзакции, потоки (Streams), TTL, импорт/экспорт.
-
Аутентификация SigV4 с совместимостью с IAM: пользователи, группы, роли, политики, границы разрешений.
-
Веб-консоль управления для администрирования учётных записей и учётных данных.
-
TLS с автоматической генерацией самоподписанного сертификата (заменяется на сертификат от CA).
-
Защита от CSRF, заголовки безопасности, управление сессиями.
-
Эндпоинт метрик в формате JSON с именами метрик и измерениями в стиле DynamoDB CloudWatch.
-
Режим демона с логированием в syslog, а также флаг
--foregroundдля контейнеров и менеджеров процессов. -
Хранилище на PostgreSQL — используйте стандартные инструменты резервного копирования, репликации и обеспечения высокой доступности.
Быстрый старт
# Сборка
cargo build --release
# Инициализация (создаёт базы данных, учётные данные администратора, TLS-сертификат, файл конфигурации)
./target/release/extenddb init
# Запуск
./target/release/extenddb serve --config extenddb.toml
# Использование с любым AWS SDK (TLS с самоподписанным сертификатом — доверие через AWS_CA_BUNDLE)
export AWS_CA_BUNDLE=~/.extenddb/tls/cert.pem
aws dynamodb list-tables --endpoint-url https://127.0.0.1:8000 --region us-east-1
Полное пошаговое руководство смотрите в Getting Started, либо воспользуйтесь платформенными установочными скриптами:
scripts/install-linux.sh # Linux
scripts/install-macos.sh # macOS
Требования
-
Rust 1.85+ (
rustup update) -
PostgreSQL 14+ (см.
docs/local-postgres-setup.md) -
Python 3.10+ (для наборов тестов и документации)
Python-окружение
python3 -m venv ~/venvs/extenddb-venv
source ~/venvs/extenddb-venv/bin/activate
pip install -r requirements.txt
Режимы аутентификации
По умолчанию ExtendDB поставляется со встроенной IAM-подобной аутентификацией. Все запросы должны быть подписаны действительными учётными данными SigV4, созданными через API управления.
| Режим | Конфигурация | Описание |
|---|---|---|
Встроенный IAM-подобный |
|
Полная проверка подписи SigV4 с локальным хранилищем учётных данных и вычислением политик IAM. Это режим по умолчанию и единственный поддерживаемый. |
Конфигурация
extenddb init автоматически генерирует файл extenddb.toml. Все ключи, значения по умолчанию и описания смотрите в extenddb.sample.toml.
Для переопределения через переменные окружения используйте префикс EXTENDDB__:
export EXTENDDB__SERVER__PORT=9000
export EXTENDDB__AUTH__PROVIDER=builtin
Настройки времени выполнения (без перезапуска):
extenddb settings --config extenddb.toml set log_level debug
TLS
TLS обязателен. Команда extenddb init генерирует самоподписанный сертификат по пути ~/.extenddb/tls/cert.pem. Сервер откажется запускаться при отключённом TLS.
Чтобы использовать самоподписанный сертификат с AWS CLI и SDK, задайте переменную AWS_CA_BUNDLE:
export AWS_CA_BUNDLE=~/.extenddb/tls/cert.pem
Для продакшена замените на сертификат, подписанный удостоверяющим центром (CA):
[server.tls]
cert_path = "/etc/extenddb/tls/cert.pem"
key_path = "/etc/extenddb/tls/key.pem"
Запуск в контейнерах
По умолчанию extenddb serve переходит в режим демона, что плохо сочетается со средами выполнения контейнеров и менеджерами процессов, ожидающими, что PID 1 останется в foreground. Передайте флаг --foreground (псевдоним --no-daemon), чтобы процесс оставался на переднем плане и направлял логи в stderr вместо syslog:
extenddb serve --config extenddb.toml --foreground
Используйте этот режим с Docker, Kubernetes, systemd Type=simple, runit, s6 или любым другим менеджером процессов, перехватывающим stdout/stderr. Команды extenddb status и extenddb stop продолжают работать так же, как и в режиме демона, поскольку PID-файл по-прежнему записывается.
Мониторинг
# Проверка работоспособности
curl --cacert ~/.extenddb/tls/cert.pem https://127.0.0.1:8000/health
# Метрики в формате JSON (в стиле DynamoDB CloudWatch)
curl --cacert ~/.extenddb/tls/cert.pem https://127.0.0.1:8000/metrics
# Syslog (Linux)
journalctl -t extenddb -f
# Syslog (macOS)
log stream --predicate 'processImagePath ENDSWITH "extenddb"' --level info
Консоль управления
Веб-интерфейс администрирования доступен по адресу https://127.0.0.1:8000/console/. Через браузер можно управлять учётными записями, пользователями, группами, ролями, политиками и ключами доступа. При первом посещении подтвердите предупреждение о самоподписанном сертификате.
Справочник по CLI
extenddb serve --config extenddb.toml # Запустить сервер (демон)
extenddb serve --config extenddb.toml --foreground # Запустить в foreground
extenddb init --catalog-db NAME # Инициализировать развёртывание
extenddb stop --config extenddb.toml # Корректная остановка
extenddb status --config extenddb.toml # Проверить статус
extenddb verify --config extenddb.toml # Проверить развёртывание
extenddb migrate --config extenddb.toml # Применить миграции схемы
extenddb destroy --config extenddb.toml # Удалить развёртывание
extenddb settings --config extenddb.toml list # Список настроек времени выполнения
extenddb manage --user admin --password <pw> <subcommand> # Управление IAM
Полный справочник по CLI и API управления смотрите в Admin Guide.
Поддерживаемые операции
Операции с таблицами
CreateTable, DeleteTable, DescribeTable, ListTables, UpdateTable, DescribeEndpoints, DescribeLimits
Операции с элементами
PutItem, GetItem, DeleteItem, UpdateItem (действия SET, REMOVE, ADD, DELETE; условные выражения; все режимы ReturnValues)
Query и Scan
Query, Scan (ключевые условия, фильтры, проекции, пагинация, выбор индекса)
Batch и транзакции
BatchGetItem (100 ключей), BatchWriteItem (25 операций), TransactGetItems (100 элементов), TransactWriteItems (100 операций)
Потоки (Streams)
ListStreams, DescribeStream, GetShardIterator, GetRecords
Прочие операции
UpdateTimeToLive, DescribeTimeToLive, TagResource, UntagResource, ListTagsOfResource, ImportTable, ExportTableToPointInTime
Структура проекта
crates/
core/ — типы, валидация, выражения (чистый синхронный Rust, без async)
engine/ — обработчики операций
storage/ — определения интерфейсов хранилища
storage-postgres/ — бэкенд на PostgreSQL
auth/ — проверка SigV4, движок политик IAM
server/ — HTTP-сервер, API управления, веб-консоль
bin/ — CLI, конфигурация, жизненный цикл демона
docs/
design/ — документы по архитектуре и проектированию
manuals/ — руководства для пользователей (PDF-конвейер)
adr/ — записи об архитектурных решениях
Документация
| Документ | Описание |
|---|---|
Полное пошаговое руководство по настройке |
|
Архитектура системы и структура крейтов |
|
Жизненный цикл сервера, конфигурация, управление IAM |
|
Модель угроз, аутентификация, авторизация |
|
Самостоятельное развёртывание, мультиоблако, изолированные среды |
|
Отличия в поведении и неподдерживаемые операции |
|
Типичные ошибки и способы их устранения |
Сборка PDF:
python3 docs/build-docs.py
Участие в разработке
Вклад в проект приветствуется. Требования к сборке, тестированию и стилю кода описаны в CONTRIBUTING.md.
В ExtendDB используются два лёгких процесса для отслеживания решений:
-
ADR (записи об архитектурных решениях) фиксируют уже принятые решения.
-
RFC предлагают изменения, затрагивающие проводной протокол, интерфейс хранилища, модель аутентификации, формат на диске, публичный CLI или любую значимую новую функцию или подсистему. Существенные изменения проходят через RFC до начала реализации.
Код в защищённых путях проходит ревью через .github/CODEOWNERS.
Лицензия
Copyright 2026 ExtendDB contributors. Распространяется под лицензией Apache License, Version 2.0. Полный текст смотрите в LICENSE.
Программное обеспечение предоставляется «как есть», без каких-либо гарантий.