Удаление строки пользователя редко автоматически очищает объекты в S3, резервные копии, превью и результаты обработки. Без отдельного процесса система теряет связь с файлами, но продолжает платить за хранение и сохраняет нежелательные данные.
Перед удалением составьте манифест всех объектов пользователя. Затем пометьте аккаунт на удаление, заблокируйте новые загрузки и выполните очистку через наблюдаемую очередь.
Что сделать в первую очередь
- Не удаляйте user row до получения списка зависимостей.
- Найдите файлы, превью, экспорты и незавершённые multipart uploads.
- Проверьте политику retention и legal hold.
- Определите, какие данные удаляются сразу, а какие по расписанию.
Почему возникает проблема
Файлы часто лежат в нескольких сервисах и не имеют внешнего ключа с каскадным удалением.
- Ключ объекта не содержит owner_id и не индексируется в базе.
- Удаляется только основной файл, но остаются превью.
- Задание очистки падает без повторной попытки.
- Версионирование bucket сохраняет удалённые версии.
- Резервная копия не учитывается в политике удаления.
Пошаговая диагностика
- Постройте карту всех мест хранения и производных файлов.
- Сравните объекты по префиксу с записями базы.
- Проверьте versioning, lifecycle и delete markers.
- Посмотрите dead-letter задания очистки.
- Выполните тест на специально созданном аккаунте.
Как исправить
Удаление пользователя лучше реализовать как состояние и повторяемый workflow, а не одну транзакцию.
- Создавайте deletion job с манифестом объектов.
- Блокируйте вход и загрузки на время обработки.
- Удаляйте производные данные и версии согласно политике.
- Повторяйте операции идемпотентно до подтверждения.
- Храните минимальный аудит без удалённого содержимого.
Как проверить результат
- После процесса не остаётся доступных объектов пользователя.
- Повторное выполнение безопасно.
- Ошибки видны администратору и не теряются.
- Общие файлы других пользователей не затронуты.
Как не допустить повторения
- Храните явную связь owner_id — object key.
- Добавьте lifecycle для временных файлов.
- Регулярно ищите orphan objects.
- Документируйте сроки резервных копий.
Чего не стоит делать
- Не удаляйте объекты по непроверенному широкому префиксу.
- Не обещайте мгновенную очистку резервных копий, если это технически неверно.
- Не скрывайте неуспешные задания.
Что подготовить для диагностики
- Список хранилищ и bucket.
- Схема связей файлов с пользователем.
- Настройки versioning и lifecycle.
- Текущая политика удаления и восстановления.
Частые вопросы
Можно ли использовать каскад в базе?
Каскад удалит связанные строки, но не внешние объекты. Для S3 и других сервисов нужен отдельный workflow.
Что делать с резервными копиями?
Обычно данные исчезают по установленному циклу ротации, а доступ к backup строго ограничивается; точный процесс фиксируют в политике.
Когда стоит обратиться за помощью
Если файлы распределены по нескольким сервисам, сначала нужен безопасный манифест, чтобы не удалить чужие или общие объекты.
Итог
Полное удаление аккаунта — управляемый процесс с проверяемым результатом. Я могу спроектировать очередь очистки, учесть S3-версии и добавить контроль оставшихся объектов.