38

我想使用 Amazon Glacier 镜像 S3 存储桶。

冰川常见问题解答指出:

Amazon S3 现在提供了一个新的存储选项,使您能够利用 Amazon Glacier 的成本极低的存储服务进行数据归档。您可以定义 S3 生命周期规则以自动将 Amazon S3 对象集存档到 Amazon Glacier,从而降低您的存储成本。您可以通过访问 Amazon S3 开发人员指南中的对象生命周期管理主题来了解更多信息。

这很接近,但我想镜像。我不想删除 S3 上的内容,只将其复制到 Glacier。

这可以使用 AWS 自动设置吗?

或者这个镜像是否需要手动上传到 Glacier?

4

4 回答 4

27

现在可以通过首先在 Amazon S3 上创建跨区域复制存储桶来实现“S3 到 Glacier”镜像(此复制存储桶将成为您原始存储桶的镜像 - 请参阅http://docs.aws.amazon.com /AmazonS3/latest/dev/crr.html ),然后从复制存储桶中设置生命周期规则(将数据移动到 Glacier) 。

于 2016-07-14T17:40:49.120 回答
4

亚马逊不通过其 API 提供此功能。我们遇到了同样的问题,并通过运行将文件重新上传到 Glacier 的每日 cron 作业解决了这个问题。

下面是一段代码,您可以使用 Python 和 boto 运行以将文件复制到 Glacier 保险库。请注意,使用下面的代码,您必须先从 S3 本地下载文件,然后才能运行它(例如,您可以使用 s3cmd) - 以下代码对于将本地文件上传到 Glacier 很有用。

import boto

# Set up your AWS key and secret, and vault name
aws_key = "AKIA1234"
aws_secret = "ABC123"
glacierVault = "someName"

# Assumption is that this file has been downloaded from S3
fileName = "localfile.tgz"

try: 
  # Connect to boto
  l = boto.glacier.layer2.Layer2(aws_access_key_id=aws_key, aws_secret_access_key=aws_secret)

  # Get your Glacier vault
  v = l.get_vault(glacierVault)

  # Upload file using concurrent upload (so large files are OK)
  archiveID = v.concurrent_create_archive_from_file(fileName)

  # Append this archiveID to a local file, that way you remember what file
  # in Glacier corresponds to a local file. Glacier has no concept of files.
  open("glacier.txt", "a").write(fileName + " " + archiveID + "\n")
except:
  print "Could not upload gzipped file to Glacier"
于 2013-06-04T19:46:12.160 回答
4

这是通过Lifecycle policy完成的,但该对象在 S3 中不再可用。您可以将其复制到单独的存储桶中以保留它。

于 2015-02-28T22:19:44.277 回答
0

如果您首先在 S3 存储桶上启用版本控制,则可以将生命周期规则应用于以前的版本。这将实现非常相似的结果,但不会有当前版本的备份。

于 2015-12-24T12:06:43.893 回答