Автоматическое резервное копирование в S3 не выполняется — резервная копия создается, но не загружается, если не запустить вручную через административный интерфейс

Привет,

Я развернул Discourse в кластере EKS и использую роли IAM для сервисных аккаунтов (IRSA) для предоставления доступа к двум бакетам S3 — одному для ассетов и другому для резервных копий. Флаг s3_use_iam_profile установлен в значение true.

Мои настройки сконфигурированы так, что резервное копирование выполняется ежедневно и должно загружаться в бакет S3 для резервных копий. Однако в логах я вижу, что процесс резервного копирования запускается, но после завершения, когда должно происходить загрузка в S3, этот шаг просто пропускается, как будто настройка не применена.

Я нашел старый пост — Discourse does not support service account and IAM role for S3 backup — в котором утверждается, что использование IRSA или профиля IAM не работает. Если я запускаю резервное копирование вручную через административный интерфейс, оно завершается успешно и загружается в S3. Не подскажете, что еще нужно настроить, чтобы это происходило автоматически?

Большое спасибо,

Стив

Я не знаю. Вот что я бы проверил дальше.

Возможно, ваш EKS уничтожается до того, как резервная копия будет сжата и отправлена в S3? Может быть, из-за нехватки места или чего-то подобного?

Привет, Джей,

Всё выглядит в порядке. Логи пода показывают, что автоматическое резервное копирование завершилось успешно и прошло нормально. Похоже, проверка на включённость удалённого хранилища ошибочно возвращает false.

Мы используем версию 3.0.1, собранную из этого коммита: Commits · discourse/discourse · GitHub

Просмотрев код, вижу строку, которая возвращает значение: discourse/lib/backup_restore/backuper.rb at 4571b10ee5a3c46249271b2870d6eaf37994460f · discourse/discourse · GitHub

Нашёл два интересных момента:

1 — Когда я запускаю резервное копирование вручную через админ-интерфейс, оно завершается успешно, и сжатый gzip-файл загружается в S3.
2 — Похоже, строка кода выше изменилась с момента выпуска версии 3.0.1: она изменилась с return unless @store.remote? на return unless store.remote?. Мой уровень знания Ruby не очень высок, но Google подсказывает, что @переменная — это переменная экземпляра self. Нужно ли мне выполнить какие-то дополнительные настройки, чтобы это работало с версией 3.0.1, или мне следует обновиться до версии 3.0.2?

Ещё раз спасибо.

Снова скажу, что я не знаю, но, как правило, если вы наблюдаете странное поведение, обновление обычно является хорошей идеей.

Похоже, что должен вызываться этот код:

Я не знаю, почему это может не работать.

Ок, спасибо, Джей.

Попробую обновиться и посмотрю, поможет ли это. Дам знать.

Стив