我正在使用亚马逊的S3和冰川服务创建基于PHP的Web应用程序。
现在我想为我的网站用户提供一个功能,他们可以选择任何文件并将其归档(意味着将文件从S3移动到Glacier)并取消归档(意味着将文件从Glacier移动到S3)。
我做了一些研究,但没有找到使用亚马逊API的任何可行方法。
问题
如何使用API在S3和冰川之间移动文件?
答案 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 :(得分:4)
您可以使用API定义将文件从Amazon S3归档到Amazon Glacier的生命周期规则,您可以使用该API检索归档到Glacier的文件的临时副本。但是,您无法使用API告知Amazon S3将特定文件移动到Glacier中。
有两种方法可以使用Amazon Glacier:
通过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小时。