我想恢复大量的 Amazon Simple Storage Service (Amazon S3) 对象。这些 Amazon S3 对象位于 Glacier Flexible Retrieval 或 Amazon S3 Glacier Deep Archive 存储类中。
解决方法
要恢复大量 Amazon S3 Glacier 存储类对象,请使用 Amazon S3 批量操作,或使用自定义 AWS 命令行界面 (AWS CLI) 命令。
**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
Amazon S3 批量操作
创建 S3 批量操作作业以恢复所有对象。您可以对自定义对象列表或 Amazon S3 清单报告运行恢复作业。
先决条件:
要使用 Amazon S3 控制台创建批量操作作业并启动恢复,请完成以下步骤:
- 打开 Amazon S3 控制台。
- 在导航窗格中,选择 Batch operations(批量操作)。
- 选择 Create job(创建作业)。
- 对于 Region(区域),选择要在其中创建作业的 AWS 区域。
- 在 Choose manifest(选择清单)下,输入以下内容:
对于清单格式,选择 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 命令
您可以运行 AWS CLI restore-object 命令来恢复您的 Amazon S3 Glacier 对象。但是,restore-object 命令一次只能恢复一个 S3 Glacier 对象,不支持批量恢复操作。
要从 S3 Glacier 存储类中恢复批量数据,请根据您的操作系统 (OS) 使用以下自定义命令。
**注意:**最佳做法是先在非生产环境中测试自定义脚本,然后再在生产环境中使用这些脚本。如果您的对象过多,则此命令可能会超时。在命令中使用 Prefix 参数来减少对象的数量。
对于基于 Linux 或 Unix 的系统,请运行以下 list-objects 命令,以恢复存储桶中的所有 S3 Glacier 对象:
aws s3api list-objects --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 替换为您的 S3 文件夹路径,将 StorageClass 值替换为 GLACIER 或 DEEP_ARCHIVE。
对于基于 Windows 的系统,请完成以下步骤:
-
运行以下 list-objects 命令,以列出存储桶中的所有 S3 Glacier 对象:
aws s3api list-objects --bucket bucket-name --prefix your-prefix --query "Contents[?StorageClass==`GLACIER`][Key]" --output text > list.txt
对象列表将保存在名为 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 命令会产生额外费用。由于 list-objects-v2 API 是分页操作,因此会进行多个 API 调用来检索结果的完整数据集。
相关信息
了解归档检索选项
使用批量操作批量执行对象操作
管理 S3 批量操作作业