Duplicity 备份到 S3:BackendException

Duplicity 备份到 S3:BackendException

我正在尝试配置 Duplicity 安装以备份到 Amazon S3 存储桶。我一直收到错误,BackendException但没有进一步的详细信息。

编辑:为了进一步隔离问题,我从该问题中删除了我的 Duply 配置,并在一个小的目录(10 MB,34 个文件)上切换到一个简单的 duplicity 命令。

这是我正在尝试运行的命令:

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,并且已设置在 Boto 中正常运行的 AWS_* 变量。

我是否遗漏了什么?我应该做什么?

答案1

我不知道为什么原始命令不起作用,但最后我发现将 URL 格式从 更改为 可以s3://s3-us-east-1.amazonaws.com/bucketname解决s3+http://bucketname问题。

简化后的工作命令如下:

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

答案2

如果您仍然无法使其工作,请尝试添加: export S3_USE_SIGV4="True" 到您的 duply profile conf 文件中。

这详细描述了这里并为我工作。

答案3

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 一起使用。

如果您使用的是法兰克福或新加坡等新地区,则可能需要将此解决方案与 Joe Hudson 的答案结合起来。

答案4

我的答案是 2022 年:我有最新的 duply ( v2.3.1) 和 duplicity ( v0.8.21)。我发现:

  • bucket名称需要http:s3+http://my-bucket/
  • 存储桶名称在您的 Amazon S3 仪表板中必须不存在
  • AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY变量必须在运行之前在终端中导出duply data backup。将它们放在里面.duply/data/conf是没有用的。在中甚至还有关于后者的注释.duply/data/conf

相关内容