使用API​​以编程方式将文件在amazon S3之间移动到Glacier,反之亦然

时间:2014-11-24 07:14:39

标签: amazon-web-services amazon-s3 amazon-glacier

我正在使用亚马逊的S3和冰川服务创建基于PHP的Web应用程序。

现在我想为我的网站用户提供一个功能,他们可以选择任何文件并将其归档(意味着将文件从S3移动到Glacier)并取消归档(意味着将文件从Glacier移动到S3)。

我做了一些研究,但没有找到使用亚马逊API的任何可行方法。

问题

如何使用API​​在S3和冰川之间移动文件?

2 个答案:

答案 0 :(得分:25)

您可以使用Glacier API将文件上传到Glacier文件库,但我不推荐它。我们backup app的先前版本就是这样做的。上传文件时,它会获得一个随机分配的名称。您可以将文件名添加到文件的元数据中,但如果您想要列出Glacier文件库中的内容,则必须查询,然后等待3-5个小时查看该列表。

生命周期策略是使用Glacier的另一种方式。当前版本的Arq使用它们,因为每个对象看起来仍然像S3对象(没有随机对象名称,没有获取对象列表的延迟),但对象内容在Glacier存储中。唯一的区别是获取对象内容需要两个步骤:您必须对request that the object be made downloadable进行API调用;当它准备就绪时,你可以download它。还有一个"高峰时段请求费"如果你请求对象可以以太快的速度下载,那么它就会发挥作用。 Amazon Glacier pricing很复杂。

一旦物体是" Glacier存储类"没有办法将其改回标准存储类"。您必须复制标准存储类"标准存储类"并删除Glacier对象。

因此,对您的问题可能是一个简单的解决方案:

  1. 将数据存储在2"文件夹"在S3中,"标准"和"冰川"。
  2. Set a lifecycle policy推送"冰川中的所有物体"文件夹到Glacier数据存储尽快。
  3. 如果要将对象从标准移动到冰川,copy it移动到冰川文件夹并删除标准文件夹中的对象(没有"移动" API)。
  4. 如果要将对象从冰川移动到标准,请执行POST request to restore;恢复后,将其复制到标准文件夹并从冰川文件夹中删除。

答案 1 :(得分:4)

您可以使用API​​定义将文件从Amazon S3归档到Amazon Glacier的生命周期规则,您可以使用该API检索归档到Glacier的文件的临时副本。但是,您无法使用API​​告知Amazon S3将特定文件移动到Glacier中。

有两种方法可以使用Amazon Glacier:

  1. 直接通过Glacier API,允许您上传/下载档案到/从Glacier金库中下载
  2. 通过Amazon S3生命周期规则,将Amazon S3中的数据存档到Amazon Glacier
  3. 通过Glacier API直接连接允许您存储长期存储存档,通常用作磁带的替代品。还必须通过Glacier API检索通过Glacier API存储的数据。这通常使用普通的企业备份软件,甚至是轻量级的产品,例如Cloudberry Backup(Windows)或Arq(Mac)。

    使用Amazon S3生命周期规则允许您在Amazon S3中存储数据,然后定义规则,以确定何时应将数据存档到Glacier以进行长期存储。例如,数据可以在创建后90天存档。数据传输由lifecycle rules管理,putBucketLifecycle API call每日批量运行。规则可以通过 RestoreObject API call (在PHP SDK中提供)进行设置,但这只定义了规则 - 无法进行API调用,告诉S3存档特定的文件到Glacier。

    Amazon S3有一个{{3}}(在PHP SDK中可用),用于将从Glacier归档的数据的临时副本还原回S3。请注意,从Glacier恢复数据需要 3-5小时