【问题标题】:Move files between amazon S3 to Glacier and vice versa programmatically using API使用 API 以编程方式在 amazon S3 和 Glacier 之间移动文件,反之亦然
【发布时间】:2014-11-24 07:14:39
【问题描述】:

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

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

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

问题

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

【问题讨论】:

  • 您是否查看过用于 S3 生命周期配置的 API?我已经使用 Python boto 完成了它。不确定 PHP。
  • 这个问题给人的印象是,您需要的是,首先,更彻底地了解 S3 的 Glacier 集成实际上是如何在 cconceptual 级别工作的......手动迁移到 Glacier 不是一件事,当文件从 Glacier 恢复到 S3 时,这是暂时的;它们也仍然存储在 Glacier 中,没有移回 S3。

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


【解决方案1】:

您可以使用 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. 将数据存储在 S3 中的 2 个“文件夹”中,“标准”和“冰川”。
  2. Set a lifecycle policy 尽快将“glacier”文件夹中的所有对象推送到 Glacier 数据存储中。
  3. 当您要将对象从标准移动到冰川时,copy it 到冰川文件夹并删除标准文件夹中的对象(没有“移动”API)。
  4. 当你想将一个物体从冰川移动到标准时,做一个POST request to restore它;恢复后,将其复制到标准文件夹并从冰川文件夹中删除。

【讨论】:

  • 如果文件的当前位置有目的和意义(例如,带有硬编码 s3 位置清单的红移转储),则可以创建指向前缀的生命周期策略,如果您不想要该前缀下的所有内容,您也可以为生命周期策略指定标签。
【解决方案2】:

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

Amazon Glacier 有两种使用方式:

  1. 直接通过 Glacier API,让您可以向 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 天存档。数据传输由lifecycle rules 管理,每天批量运行。可以通过 putBucketLifecycle API call(在 PHP SDK 中提供)设置规则,但这仅定义规则——不可能进行 API 调用来告诉 S3 将特定文件归档到冰川。

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

【讨论】:

【解决方案3】:

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

使用 S3 浏览器:

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

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

使用 CLI:

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

Step2:在 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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2021-12-19
    • 1970-01-01
    • 2019-02-15
    • 2017-02-08
    • 2015-11-04
    • 2013-10-01
    相关资源
    最近更新 更多