如何对当前位于 S3 Glacier 或 S3 Glacier Deep Archive 存储类中的大量 Amazon S3 对象启动恢复?

2 分钟阅读
0

我在 Amazon Simple Storage Service(Amazon S3)Glacier 或 Amazon S3 Glacier Deep Archive 存储类中有大量对象。我想以大规模操作方式对所有这些对象进行恢复。

解决方法

要恢复大量 Amazon S3 Glacier 存储类对象,可以使用以下任一方法:

  • Amazon S3 批量操作
  • 使用 AWS 命令行界面(AWS CLI)创建的自定义脚本

**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI

使用 S3 批量操作

创建一个 Amazon S3 批量操作作业,对所有对象启动恢复。可以对自定义对象列表或 Amazon S3 清单报告运行 S3 启动恢复对象作业

**注意:**在创建作业之前,请务必查看 Amazon S3 批量操作的定价

在开始创建 S3 批量操作作业之前,请确保满足以下要求:

  • 您拥有有权启动恢复的 AWS Identity and Access Management(IAM)用户或角色。此外,IAM 用户或角色还必须对 Amazon S3 批量操作具有信任策略
  • 您有一个 CSV 列表或 Amazon S3 清单报告,用作要恢复的对象的清单。该清单文件必须存储在 S3 桶上。不支持服务器端加密(客户提供的密钥或 AWS Key Management Service 密钥)的清单。有关每种格式要求的详细信息,请参阅指定清单

要使用 Amazon S3 控制台创建批量操作作业以启动恢复,请执行以下操作:

1.    打开 Amazon S3 控制台

2.    在导航窗格中,选择批量操作

3.    选择创建作业

4.    对于区域,选择要在其中创建作业的 AWS 区域。

5.    在选择清单下,输入以下内容:
对于清单格式,选择 S3 清单报告CSV 作为文件格式。
对于清单对象的路径,输入清单文件的 S3 路径(例如:s3://awsexamplebucket/manifest.csv)。

6.    选择下一步

7.    在选择操作下,输入以下内容:
对于操作,选择恢复
对于恢复源,选择 GlacierGlacier Deep Archive
对于恢复副本可用的天数,输入适用于您用例的天数。
对于恢复套餐,选择批量检索标准检索。有关每种套餐的详细信息,请参阅归档检索选项

注意:S3 批量操作不支持加速检索套餐。

8.    选择下一步

9.    在配置其他选项下,输入以下内容:
对于描述,可以选择输入作业的描述。或者,也可以将此字段留空。
对于优先级,输入一个数字以指示作业的优先级。
对于生成完成报告,选择保持此选项处于选中状态。
对于完成报告范围,选择仅失败的任务所有任务,具体取决于您的用例。
对于完成报告目标路径,输入要将报告发送到的路径。
对于权限,选择从现有 IAM 角色中选择。然后,选择有权启动恢复且对 S3 批量操作具有信任策略的 IAM 角色。

10.    选择下一步

11.    在查看页面上,查看作业的详细信息。然后,选择创建作业

12.    创建作业后,作业的状态将从更改为正在准备。然后,状态更改为等待确认。要运行作业,必须选择该作业,然后选择确认并运行。在确认之前,该作业不会运行。

13.    (可选)如果选择了生成完成报告,则在作业完成后查看报告。可以在指定的完成报告目标路径中找到报告。

有关每种作业状态的描述,请参阅作业状态

有关失败作业的详细信息,请参阅跟踪作业失败

使用自定义 AWS CLI 脚本

可以使用 AWS CLI restore-object 命令恢复 Amazon S3 Glacier 对象。但是,该命令一次只能恢复一个 S3 Glacier 对象,不支持批量恢复操作。因此,请通过以下自定义解决方案,使用可用的检索选项从 S3 Glacier 存储类恢复批量数据。

**注意:**必须先在测试或开发环境中对这些自定义脚本进行测试,然后才能在生产环境中使用。自定义命令将逐个恢复 S3 Glacier 存储类中的所有对象。如果有很多对象,命令可能会超时。可以使用 Prefix 参数运行自定义命令,以缩小对象的数量。

对于基于 Linux 或 Unix 的系统,请运行以下命令,以递归方式恢复桶中的所有 S3 Glacier 对象:

aws s3api list-objects --bucket <bucket-name> --prefix <prefix> --query 'Contents[?StorageClass==`GLACIER`][Key]' --output text | xargs -I {} sh -c "aws s3api restore-object --bucket <bucket-name> --key \"{}\" --restore-request Days=5,GlacierJobParameters={Tier=Standard} || true"

请务必执行以下操作:

  • <bucket-name> 替换为 S3 桶名称。
  • <prefix> 替换为 S3 文件夹路径。

对于基于 Windows 的系统,请执行以下操作:

1.    运行以下命令,列出桶中的所有 S3 Glacier 对象:

aws s3api list-objects --bucket <bucket-name> --prefix <prefix> --query "Contents[?StorageClass==`GLACIER`][Key]" --output text > list.txt

运行此命令时,对象列表将保存在名为 list.txt 的文件中。

2.    运行以下命令,恢复 S3 Glacier 对象:

for /F "tokens=*" %i in (list.txt) do @aws s3api restore-object --bucket <bucket-name> --key "%i" --restore-request Days=5,GlacierJobParameters={Tier=Standard} || true"

**注意:**对于 LIST 和数据检索请求,前面所述的自定义 AWS CLI 脚本会产生额外费用。由于 list-objects-v2 是分页操作,因此可能会发出多个 API 调用以检索结果的整个数据集。有关详细信息,请参阅 Amazon S3 定价

相关信息

创建 S3 批量操作作业

对 Amazon S3 对象执行大规模批量操作

管理 S3 批量操作作业

AWS 官方
AWS 官方已更新 1 年前