16

我正在使用 Amazon 的 S3 和 glacier 服务创建一个基于 PHP 的 Web 应用程序。

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

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

问题

如何使用 API 在 S3 和 glacier 之间移动文件?

4

3 回答 3

31

您可以使用 Glacier API 将文件上传到 Glacier 保险库,但我不建议这样做。我们的备份应用程序的先前版本就是这样做的。当您上传文件时,它会获得一个随机分配的名称。您可以将文件名添加到文件的元数据中,但如果您想要 Glacier 保险库中的内容列表,您必须查询,然后等待 3-5 小时才能获得列表。

生命周期策略是使用 Glacier 的另一种方式。当前版本的 Arq 使用它们是因为每个对象看起来仍然像 S3 对象(没有随机对象名称,获取对象列表没有延迟),但对象内容在 Glacier 存储中。唯一的区别是获取对象内容是一个两步过程:您必须进行 API 调用以请求将对象设为可下载;准备好后,您可以下载它。如果您请求以太快的速度下载对象,也会产生“每小时高峰请求费”。Amazon Glacier 定价很复杂。

一旦对象是“Glacier 存储类”,就无法将其更改回“标准存储类”。您必须复制“标准存储类”对象并删除 Glacier 对象。

所以也许一个简单的解决你的问题的方法是:

  1. 将数据存储在 S3 中的 2 个“文件夹”中,“标准”和“冰川”。
  2. 设置生命周期策略,将“glacier”文件夹中的所有对象尽快推送到 Glacier 数据存储。
  3. 如果要将对象从标准移动到冰川,请将其复制到冰川文件夹并删除标准文件夹中的对象(没有“移动”API)。
  4. 当您要将对象从冰川移动到标准时,请执行POST 请求以将其恢复;恢复后,将其复制到标准文件夹并从冰川文件夹中删除。
于 2015-07-30T17:14:10.757 回答
7

您可以使用 API 定义将文件从 Amazon S3 归档到 Amazon Glacier 的生命周期规则,并且可以使用 API 检索归档到 Glacier 的文件的临时副本。但是,您不能使用 API 告诉 Amazon S3 将特定文件移动到 Glacier。

有两种使用 Amazon Glacier 的方法:

  1. 直接通过 Glacier API,允许您将档案上传/下载到 Glacier 保险库/从 Glacier 保险库上传/下载档案
  2. 通过 Amazon S3 生命周期规则,将数据从 Amazon S3 归档到 Amazon Glacier

通过 Glacier API 直接连接允许您存储存档以进行长期存储,通常用作磁带的替代品。通过 Glacier API 存储的数据也必须通过 Glacier API 进行检索。这通常使用普通的企业备份软件,甚至是Cloudberry Backup (Windows) 或Arq (Mac) 等轻量级产品来完成。

使用 Amazon S3 生命周期规则,您可以将数据存储在 Amazon S3 中,然后定义确定何时应将数据存档到 Glacier 以进行长期存储的规则。例如,数据可以在创建后 90 天存档。数据传输受生命周期规则管理,这些规则每天都在批处理基础上运行。可以通过putBucketLifecycle API 调用(在 PHP SDK 中可用)来设置规则,但这仅定义了规则——不可能进行 API 调用来告诉 S3 将特定文件存档到 Glacier。

Amazon S3 有一个RestoreObject API 调用(在 PHP 开发工具包中可用),用于将从 Glacier 存档的数据的临时副本恢复回 S3。请注意,从 Glacier 恢复数据需要3-5 小时

于 2014-11-24T09:49:16.433 回答
0

要将文件从 Glacier 移动到 S3 标准:

使用 S3 浏览器:

步骤1:单击对象并选择restore from Glacier这将使对象可用。(在标准类中给出您希望对象需要的天数)

步骤 2:再次选择该选项,"Change Storage Class"这将更改对象的存储类别。

使用命令行:

Step1:aws s3api restore-object --bucket awsexamplebucket --key dir1/example.obj --restore-request '{"Days":25,"GlacierJobParameters":{"Tier":"Standard"}}'这使得对象可以基于冰川4小时的存储类使用。

步骤 2:在 CLI 中运行此命令:

对象可用后运行此命令将对象更改为标准类 aws s3 cp s3://<object path> s3://<destination bucket path> --storage-class STANDARD --recursive --force-glacier-transfer

点击此链接-[1]:https ://aws.amazon.com/premiumsupport/knowledge-center/restore-s3-object-glacier-storage-class/

于 2021-09-20T17:41:10.253 回答