亚马逊冰川服务能否镜像亚马逊S3存储桶?

38
我想要使用亚马逊冰川服务来镜像一个S3存储桶。 Glacier FAQ中提到:
Amazon S3现在提供了一种新的存储选项,使您能够利用Amazon Glacier极低成本的数据归档服务。您可以定义S3生命周期规则,自动将一组Amazon S3对象归档到Amazon Glacier以降低存储成本。您可以访问Amazon S3开发人员指南中的“对象生命周期管理”主题了解更多信息。
这很接近,但我想要镜像。我不想删除S3上的内容,只是将其复制到Glacier。
AWS是否可以自动设置此操作?
还是这个镜像需要手动上传到Glacier?

我也想要这个功能,但我认为目前还不存在。 - Charles Engelke
1
你试图通过将S3镜像到Glacier来实现什么目标? - Eric Hammond
@EricHammond 我正在尝试将我的S3文件备份到Glacier上。 - Justin Tanner
我认为Glacier通常不是创建S3对象备份副本(在两个地方都保留副本)的合适位置。我在这里的答案中进行了更详细的解释:https://dev59.com/AGUp5IYBdhLWcg3wf3ys#15234873 - Eric Hammond
我也希望能够有这个功能,以增加存储在S3中的数据的可用性。 - VAAA
4个回答

27

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


4
亚马逊的API不提供此功能。我们曾经遇到过同样的问题,通过运行每日cron作业来重新上传文件到Glacier解决了该问题。
以下是可以使用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"

4

这可以通过生命周期策略完成,但该对象在S3中不再可用。您可以将其复制到单独的存储桶中以保留它。


你有任何想法为什么它被移除了吗?或者你知道在哪里可以找到关于它被移除的信息吗? - pgrzesik

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接