3.7 KiB
3.7 KiB
S3 Bucket Notifications: изменения в бакете и вызов функции
Короткий ответ
Да, для S3-совместимого хранилища можно вызывать обработчик при изменениях в бакете через стандартный механизм уведомлений:
- событие в бакете (
ObjectCreated,ObjectRemoved), - правило уведомления на бакете,
- destination (webhook/queue/topic),
- consumer/функция, которая принимает событие.
Что проверено в нашем контуре
Проверка выполнялась удалённо (через SSH), не локально.
- API
deck-api-test.ngcloud.ru:- есть общий endpoint
/notifications, - явных endpoint'ов вида
bucketNotifications,events,webhooksв этом API не обнаружено.
- есть общий endpoint
- Документация
docs.s3.msk-1.ngcloud.ru:- в публичных страницах не найден явный раздел про bucket notifications.
- Прямая проверка S3-слоя:
mc event ls <alias>/<bucket>отработал успешно (код возврата0),- это подтверждает доступность стандартной S3 операции чтения notification-конфигурации;
- пустой вывод означает, что правила ещё не заданы.
Нужно ли задавать это при создании бакета
Рекомендуется задавать сразу в том же Terraform apply, но это отдельная конфигурация относительно самого факта создания бакета.
Практически правильно так:
- Создать (или использовать)
S3 Storage service. - Создать бакет.
- Создать destination для событий (webhook/queue/topic).
- Назначить notification rule на бакет.
- Поднять consumer/функцию, которая обрабатывает событие.
Как это выглядит архитектурно
Bucket (ObjectCreated/ObjectRemoved)
-> Bucket Notification Rule
-> Destination (Webhook / Queue / Topic)
-> Function/Worker (business logic)
Что это значит для Terraform
Лучший путь: один модуль/стек, где декларативно описано сразу всё:
- bucket,
- destination,
- notification rule,
- function/consumer.
Это даёт предсказуемый результат: после apply события бакета уже маршрутизируются в обработчик.
Если notifications недоступны в конкретном backend
Fallback — polling:
- периодический опрос бакета,
- сравнение состояния (
key + etag/version_id + mtime), - вызов функции только на diff.
Проверка и настройка через CLI
Пример скрипта в репозитории:
scripts/s3_notification_example.sh
Скрипт:
- читает
.s3cfg, - показывает текущие правила,
- добавляет правило,
- показывает итоговую конфигурацию.
Важно: для
event addнужен существующий destination (TARGET_ARN) в S3/MinIO-конфигурации.