Назад | Перейти на главную страницу

Резервное копирование дублирования на S3: BackendException

Я пытаюсь настроить свою установку Duplicity для резервного копирования в корзину Amazon S3. Я продолжаю получать BackendException ошибка без дополнительных подробностей.

РЕДАКТИРОВАТЬ: Я удалил свою конфигурацию Duply из этого вопроса, чтобы больше изолировать проблему, и переключился на простую команду дублирования в небольшом каталоге (10 МБ, 34 файла).

Вот команда, которую я пытаюсь запустить:

duplicity full ./logs "s3://s3-us-east-1.amazonaws.com/bucketname" -v9

И вот результат:

root@ats:/var/ats# duplicity full ./logs "s3://s3-us-east-1.amazonaws.com/bucketname" -v9

Duplicity 0.6 series is being deprecated:
See http://www.nongnu.org/duplicity/

Using archive dir: /root/.cache/duplicity/876c7d0b54276e675d41f6ea6077d52f
Using backup name: 876c7d0b54276e675d41f6ea6077d52f
Import of duplicity.backends.botobackend Succeeded
Import of duplicity.backends.cfbackend Succeeded
Import of duplicity.backends.dpbxbackend Succeeded
Import of duplicity.backends.ftpbackend Succeeded
Import of duplicity.backends.ftpsbackend Succeeded
Import of duplicity.backends.gdocsbackend Succeeded
Import of duplicity.backends.hsibackend Succeeded
Import of duplicity.backends.imapbackend Succeeded
Import of duplicity.backends.localbackend Succeeded
Import of duplicity.backends.megabackend Succeeded
Import of duplicity.backends.rsyncbackend Succeeded
Import of duplicity.backends.sshbackend Succeeded
Import of duplicity.backends.swiftbackend Succeeded
Import of duplicity.backends.tahoebackend Succeeded
Import of duplicity.backends.webdavbackend Succeeded
Import of duplicity.backends.~par2wrapperbackend Succeeded
Using temporary directory /tmp/duplicity-sQ3sGs-tempdir
Backend error detail: Traceback (most recent call last):
  File "/usr/local/bin/duplicity", line 1509, in <module>
    with_tempdir(main)
  File "/usr/local/bin/duplicity", line 1503, in with_tempdir
    fn()
  File "/usr/local/bin/duplicity", line 1336, in main
    action = commandline.ProcessCommandLine(sys.argv[1:])
  File "/usr/local/lib/python2.7/dist-packages/duplicity/commandline.py", line 1062, in ProcessCommandLine
    backup, local_pathname = set_backend(args[0], args[1])
  File "/usr/local/lib/python2.7/dist-packages/duplicity/commandline.py", line 955, in set_backend
    globals.backend = backend.get_backend(bend)
  File "/usr/local/lib/python2.7/dist-packages/duplicity/backend.py", line 163, in get_backend
    return _backends[pu.scheme](pu)
  File "/usr/local/lib/python2.7/dist-packages/duplicity/backends/_boto_single.py", line 163, in __init__
    self.resetConnection()
  File "/usr/local/lib/python2.7/dist-packages/duplicity/backends/_boto_single.py", line 189, in resetConnection
    raise BackendException(err.message)
BackendException

BackendException:

Я тестировал Boto (который Duplicity использует для соединений S3) с помощью этого скрипта:

root@ats:/var/ats# python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto.s3
>>> conn = boto.s3.connect_to_region("us-east-1")
>>> bucket = conn.get_bucket("bucketname")
>>> for key in bucket.list(): print key, key.storage_class
...
<Key: bucketname,test.txt> STANDARD
>>> exit()

Я убедился, что использую последние соответствующие версии duplicity и python, и установил переменные AWS_ *, которые отлично работают в Boto.

Я что-то упускаю? Что я должен делать?

Если вы все еще не можете заставить его работать, попробуйте добавить: export S3_USE_SIGV4="True" в конфигурационный файл вашего дублированного профиля.

Это подробно описано Вот и работал у меня.

Я не знаю, почему исходная команда не работала, но в конце концов я понял, что изменение формата URL с s3://s3-us-east-1.amazonaws.com/bucketname к s3+http://bucketname устраняет проблему.

Уменьшенная рабочая команда теперь:

duplicity full ./logs "s3+http://bucketname" -v9

У меня не работали ни SIGV4, ни s3 + http.

Мое решение заключалось в использовании названия региона в URL-адресе вместо общего s3. В моем случае это был eu-west-1 (Ирландия).

Это выглядит так:

s3://s3-eu-west-1.amazonaws.com/bucketname

Вместо того:

s3://s3.amazonaws.com/bucketname

Хотя второй общий URL-адрес работает в других инструментах, таких как s3cmd, он не работает с Duplicity / Boto.

Возможно, вам придется объединить это решение с ответом Джо Хадсона, если вы используете новый регион, такой как Франкфурт или Сингапур.