将许多 S3 存储桶移动到 Glacier

Move many S3 buckets to Glacier

我们有大量 S3 存储桶,并且正在清理这些东西。我们将 Glacier 确定为存档其数据的好方法。计划是存储这些桶的内容,然后删除它们。 这将是一次操作,我们不需要自动化的东西。

我知道:

我试了一下并创建了一个保险库。但是我无法 运行 aws glacier 命令。我收到一些 SSL 错误,这显然与 Python 库有关,我是否 运行 它在我的 Mac 或来自某个专用容器。

另外,直接使用Glacier API似乎很痛苦(并且要保留正确的文件信息),而且使用起来更简单通过专用存储桶。

那个呢?在 AWS 中有什么可以做我想做的事吗?或者有什么建议可以用一种不太挑剔的方式来做吗?您会推荐什么工具?

哇,这么多问题!

Amazon Glacier 有两种使用方式:

  • 在 Amazon S3 存储桶上创建 Lifecycle Policy 以将数据存档到 Glacier。这些对象仍将 看起来 在 S3 中,包括它们的安全性、大小、元数据等。但是,它们的内容存储在 Glacier 中。通过此方法存储在 Glacier 中的数据必须恢复回 S3 才能访问内容。
  • 通过 AWS API 将数据直接发送到 Amazon Glacier。以这种方式发送的数据必须通过 API.
  • 恢复

Amazon Glacier 对存储量收费,加上每个请求。在 Glacier 中存储许多小文件效率较低。相反,建议创建 archives(例如 zip 文件)以生成更少、更大的文件。这会使检索特定文件变得更加困难。

如果您打算直接使用 Glacier,使用 实用程序要容易得多,例如 Cloudberry Backup,但是这些实用程序旨在从计算机到 Glacier。他们可能不会将 S3 备份到 Glacier。

如果数据已经在 Amazon S3 中,最简单的选择是创建生命周期策略。然后您可以使用 S3 管理控制台和标准 S3 工具访问和恢复数据.

使用 S3 归档桶完成了这项工作。 以下是我的处理方式:

首先,我创建了一个名为 mycompany-archiveS3 存储桶,其生命周期规则将 在文件创建 1 天后将 class 存储到 Glacier

然后,(在我的 Mac 上安装了 aws 工具)我 运行 以下 aws获取桶列表的命令:aws s3 ls

然后我将输出粘贴到一个可以进行 regexp 替换的编辑器中,我做了以下操作:

^\S*\s\S*\s(.*)$替换为aws s3 cp --recursive s3:// s3://mycompany-archive/ && \

它给了我一个大命令,我从中删除了最后的尾随 && \,以及我不想复制的桶对应的行(主要是 mycompany-archive 必须从那里删除),我有做 t运行sfers 所需的东西。

该命令可以直接执行,但我更喜欢 运行 使用 screen 实用程序执行此类命令,以确保进程在我关闭时不会停止我的 session 是偶然的。
要启动它,我 运行 screen,启动命令,然后按 CTRL+A 然后按 D 分离它。然后我可以通过 运行ning screen -r.

回到它

最后,在MacOS下,我运行cafeinate确保电脑之前不会休眠结束了。对运行它,发出ps|grep aws定位到进程id的命令。然后 caffeinate -w 31299(进程 ID)以确保我的 Mac 在进程完成之前不允许休眠。

它完成了工作(好吧,它仍然是 运行ning),我现在有一个存储桶,其中包含每个存档存储桶的文件夹。下一步将是删除不需要的 S3 存储桶.
当然,这种做法可以在很多方面进行改进,主要是将所有内容都变成 fault-tolerant 可重播的脚本。在这种情况下,我必须务实地思考如何改进它会花费更多的时间而几乎没有任何收获。