我想恢复大量的 Amazon Simple Storage Service (Amazon S3) 对象。这些 Amazon S3 对象位于 Glacier Flexible Retrieval 或 Amazon S3 Glacier Deep Archive 存储类别中。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
要恢复大量 Amazon S3 Glacier 存储类别对象,请使用 Amazon S3 批量操作或自定义 AWS CLI 命令。
Amazon S3 批量操作
创建 S3 批量操作作业以恢复所有对象。您可以对自定义对象列表或 Amazon S3 清单报告运行恢复作业。
先决条件
验证以下内容:
- 您有一个具有恢复对象权限的 AWS Identity and Access Management (IAM) 用户或角色。该 IAM 用户或角色还必须具有针对 Amazon S3 批量操作的信任策略。
- 您有一个 .csv 文件或 Amazon S3 清单报告,可用作要恢复的对象的清单。将清单文件存储在 S3 存储桶中。有关详细信息,请参阅创建清单文件。
要使用 Amazon S3 控制台创建批量操作作业并启动恢复,请完成以下步骤:
- 打开 Amazon S3 控制台。
- 在导航窗格中,选择 Batch operations(批量操作)。
- 选择 Create job(创建作业)。
- 对于 Region(区域),选择要在其中创建作业的 AWS 区域。
- 在 Choose manifest(选择清单)下,输入以下内容:
对于 Manifest format(清单格式),选择 S3 inventory report(S3 清单报告)或 CSV 作为文件格式。
对于 Path to manifest object(清单对象的路径),输入 S3 存储桶中清单文件的文件夹路径,例如 s3://awsexamplebucket/manifest.csv。
- 选择 Next(下一步)。
- 在 Choose operation(选择操作)下,输入以下内容:
对于 Operation(操作),选择 Restore(恢复)。
对于 Restore source(恢复源),选择 Glacier Flexible Retrieval 或 Glacier Deep Archive。
对于 Number of days that the restored copy is available(恢复副本可用的天数),输入天数。
对于 Restore tier(恢复层),选择 Bulk retrieval(批量检索)或 Standard retrieval(标准检索)。
**注意:**S3 批量操作不支持 Expedited(加速)检索层。
- 选择 Next(下一步)。
- 在 Configure additional options(配置其他选项)下,输入以下内容:
(可选)对于 Description(描述),输入描述。
对于 Priority(优先级),输入一个数字以表示作业的优先级。
对于 Generate completion report(生成完成报告),保持此选项处于选中状态。
对于 Completion report scope(完成报告范围),选择 Failed tasks only(仅失败的任务)或 All tasks(所有任务)。
对于 Path to completion report destination(完成报告目标路径),输入要将报告发送到的路径。
对于 Permission(权限),选择 Choose from existing IAM roles(从现有 IAM 角色中选择),然后选择具有所需权限的 IAM 角色。
- 选择 Next(下一步)。
- 在 Review(查看)页面上,查看作业的详细信息,然后选择 Create job(创建作业)。
- 选择作业,然后选择 Confirm and run(确认并运行)。
- (可选)如果选择了 Generate completion report(生成完成报告),请在作业完成后查看报告。您可以在指定的 Path to completion report destination(完成报告目标路径)中查找报告。
有关每种作业状态的描述,请参阅作业状态。
重要事项:****恢复作业仅会发起恢复对象的请求。在您发起请求后,S3 批量操作会将针对该对象的作业报告为已完成。当批量操作作业恢复对象后,Amazon S3 不会更新作业,也不会通知您。但是,您可以使用 Amazon S3 事件通知,以便当对象在 Amazon S3 中可用时接收通知。
有关失败作业的详细信息,请参阅跟踪作业失败。
使用自定义 AWS CLI 命令
要从 S3 Glacier 存储类别中恢复批量数据,请使用以下与您的操作系统 (OS) 对应的自定义命令。
**注意:**最佳做法是先在非生产环境中测试自定义脚本,然后再在生产环境中使用这些脚本。如果您的对象过多,则此命令可能会超时。在命令中使用 Prefix 参数来减少对象的数量。
对于基于 Linux 或 Unix 的系统
您可以运行 AWS CLI restore-object 命令来恢复您的 Amazon S3 Glacier 对象。但是,restore-object 命令一次只能恢复一个 S3 Glacier 对象,不支持批量恢复操作。
运行以下 list-objects-v2 命令,恢复存储桶中的所有 S3 Glacier 对象:
`` aws s3api list-objects-v2 --bucket bucket-name --prefix your-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 存储桶名称,将 your-prefix 替换为您的 Amazon S3 文件夹路径,将 StorageClass 值替换为 GLACIER 或 DEEP_ARCHIVE。
对于基于 Windows 的系统
对于列表和数据检索请求,以下自定义 AWS CLI 命令会产生额外费用。由于 list-objects-v2 API 调用是分页操作,因此会进行多个 API 调用来检索结果的完整数据集。
完成以下步骤:
-
运行以下 list-objects-v2 命令,列出存储桶中的所有 S3 Glacier 对象:
`` aws s3api list-objects-v2 --bucket bucket-name --prefix your-prefix --query "Contents[?StorageClass==`GLACIER`][Key]" --output text > list.txt``
-
运行 restore-object 命令以恢复 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"`
**注意:**您可以运行 AWS CLI restore-object 命令来恢复您的 Amazon S3 Glacier 对象。但是,restore-object 命令一次只能恢复一个 S3 Glacier 对象,不支持批量恢复操作。
相关信息
了解归档检索选项
使用批量操作批量执行对象操作
管理 S3 批量操作作业