

# 恢复已归档的对象
<a name="restoring-objects"></a>

以下存储类或存储层中的 Amazon S3 对象已归档，无法实时访问：
+ S3 Glacier Flexible Retrieval 存储类
+ S3 Glacier Deep Archive 存储类
+ S3 Intelligent-Tiering 归档访问层
+ S3 Intelligent-Tiering 深度归档访问层

无法立即访问存储在 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类中的 Amazon S3 对象。要访问这些存储类中的对象，您必须在指定的持续时间（天数）内将该对象的临时副本还原到其 S3 桶。如果您想要该对象的永久副本，请还原该对象，然后在 Amazon S3 桶中创建该对象的一个副本。Amazon S3 控制台不支持复制已还原的对象。对于这种类型的复制操作，请使用 AWS Command Line Interface（AWS CLI）、AWS SDK 或 REST API。除非您制作副本并更改其存储类，否则对象仍将存储在 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类中。有关使用这些存储类的信息，请参阅[极少访问的对象的存储类](storage-class-intro.md#sc-glacier)。

要访问 S3 Intelligent-Tiering 归档访问层和深度归档访问层中的对象，您必须启动还原请求，并等待对象移动到频繁访问层。从归档访问层或深度归档访问层进行还原时，对象会转换回 频繁访问层中。有关使用这些存储类的信息，请参阅[用于自动优化访问模式不断变化或未知的数据的存储类](storage-class-intro.md#sc-dynamic-data-access)。

有关归档对象的一般信息，请参阅[使用归档的对象](archived-objects.md)。

**注意**  
当您从 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类还原存档对象时，您需要同时为存档对象和临时还原的副本付费。
从 S3 Intelligent-Tiering 还原对象时，标准检索或批量检索不收取检索费用。
对已还原的存档对象调用的后续还原请求将作为 `GET` 请求计费。有关定价的信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

## 恢复已归档的对象
<a name="restore-archived-objects"></a>

您可以使用 Amazon S3 控制台、Amazon S3 REST API、AWS SDK、AWS Command Line Interface（AWS CLI）或 S3 批量操作还原归档的对象。

### 使用 S3 控制台
<a name="restoring-objects-console"></a>

**使用 Amazon S3 控制台还原对象**  
使用以下过程还原已归档到 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类或 S3 Intelligent-Tiering 归档访问或深度归档访问存储层的对象。

**还原已归档的对象**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在存储桶列表中，选择包含您想要还原的对象的存储桶的名称。

1. 在 **Objects**（对象）列表中，选择要还原的一个或多个对象，再选择 **Actions**（操作），然后选择 **Initiate restore**（启动还原）。

1. 如果要从 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 进行还原，请在**还原的副本可用的天数**框中输入您希望归档数据可供访问的天数。

1. 对于**检索层**，执行以下操作之一：
   + 选择**批量检索**或**标准检索**，然后选择**启动还原**。
   + 选择 **Expedited retrieval**（加急检索）（仅适用于 S3 Glacier Flexible Retrieval 或 S3 Intelligent-Tiering 归档访问）。如果您要还原 S3 Glacier Flexible Retrieval 中的对象，则可以选择是否要购买预调配容量来进行加速检索。如果要购买预调配容量，请继续执行下一步。否则，请选择**启动还原**。
**注意**  
S3 Intelligent-Tiering 归档访问层和深度归档访问层中的对象会自动还原到频繁访问层。

1. （可选）如果您要还原 S3 Glacier Flexible Retrieval 中的对象，并且您选择了**加速检索**，您可以选择是否购买预调配容量。预调配容量仅适用于 S3 Glacier Flexible Retrieval 中的对象。如果您已有预调配容量，请选择 **启动还原**以开始预调配检索。

   如果您有预调配容量，则您的预调配容量可处理您的所有加速检索。有关更多信息，请参阅 [预调配容量](restoring-objects-retrieval-options.md#restoring-objects-expedited-capacity)。
   + 如果您没有预调配容量并且不想购买，请选择**启动还原**。
   + 如果您没有预调配容量，但要购买预调配容量单位（PCU），请选择**购买 PCU**。在**购买 PCU** 对话框中，选择要购买的 PCU 数量，确认购买，然后选择**购买 PCU**。在收到**购买成功**消息后，选择**启动还原**以开始预调配检索。

### 使用 AWS CLI
<a name="restoring-objects-cli"></a>

**从 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 还原对象**  
以下示例使用 `restore-object` 命令还原桶 `amzn-s3-demo-bucket` 中的对象 *`dir1/example.obj`*，时间为 25 天。

```
aws s3api restore-object --bucket amzn-s3-demo-bucket --key dir1/example.obj --restore-request '{"Days":25,"GlacierJobParameters":{"Tier":"Standard"}}'
```

如果示例中使用的 JSON 句法导致 Windows 客户端错误，则使用如下句法替换还原请求：

```
--restore-request Days=25,GlacierJobParameters={"Tier"="Standard"}
```

**从 S3 Intelligent-Tiering 归档访问和深度归档访问还原对象**  
以下示例使用 `restore-object` 命令将桶 `amzn-s3-demo-bucket` 中的对象 *`dir1/example.obj`* 还原到频繁访问层

```
aws s3api restore-object --bucket amzn-s3-demo-bucket --key dir1/example.obj --restore-request '{}'
```

**注意**  
与 S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 存储类不同，S3 Intelligent-Tiering 对象的还原请求不接受该 `Days` 值。

**监控还原状态**  
要监控 `restore-object` 请求的状态，请使用以下 `head-object` 命令：

```
aws s3api head-object --bucket amzn-s3-demo-bucket --key dir1/example.obj
```

有关更多信息，请参阅《AWS CLI Command Reference》**中的 [https://docs.aws.amazon.com//cli/latest/reference/s3api/restore-object.html](https://docs.aws.amazon.com//cli/latest/reference/s3api/restore-object.html)。

### 使用 REST API
<a name="restoring-objects-rest"></a>

Amazon S3 向您提供了用于启动归档对象还原的 API 操作。有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOSTrestore.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOSTrestore.html)。

### 使用 AWS SDK
<a name="restoring-objects-sdks"></a>

有关如何使用 AWS SDK 还原 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 中的归档对象的示例，请参阅《Amazon S3 API 参考》**中的 [Code examples](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_RestoreObject_section.html)。

### 使用 S3 批量操作
<a name="restoring-int-tier-archive-objects-batch-ops"></a>

要使用单个请求还原多个归档对象，您可以使用 S3 批量操作。您为 S3 批量操作提供要操作的对象列表。S3 批量操作调用相应的 API 操作来执行指定的操作。单个批量操作任务可对包含 EB 级数据的数十亿个对象执行指定操作。

要创建批量操作任务，您必须有一个仅包含要还原的对象的清单。您可以使用 S3 清单来创建清单，也可以提供包含必要信息的 CSV 文件。有关更多信息，请参阅 [指定清单](batch-ops-create-job.md#specify-batchjob-manifest)。

在创建和运行 S3 批量操作任务之前，您必须向 Amazon S3 授予代表您执行 S3 批量操作的权限。有关所需的权限，请参阅[授予批处理操作的权限](batch-ops-iam-role-policies.md)。

**注意**  
批量操作任务既可以在 S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 存储类对象上运行，*也可以*在 S3 Intelligent-Tiering 归档访问和深度归档访问存储层对象上运行。批量操作不能在同一个任务中对两种类型的归档对象进行操作。要还原两种类型的对象，*必须*创建单独的分批操作任务。  
有关使用批量操作还原归档对象的更多信息，请参阅[使用批量操作还原对象](batch-ops-initiate-restore-object.md)。

**创建 S3 启动还原对象批量操作任务**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择**批量操作**。

1. 选择**创建任务**。

1. 对于 **AWS 区域**，选择要在其中创建任务的区域。

1. 在**清单格式**下，请选择要使用的清单类型。
   + 如果您选择 **S3 清单报告**，请输入 Amazon S3 作为 CSV 格式清单报告的一部分生成的 `manifest.json` 对象的路径。如果要使用除最新版本之外的清单版本，请输入 `manifest.json` 对象的版本 ID。
   + 如果您选择 **CSV**，请输入 CSV 格式清单对象的路径。清单对象必须遵循控制台中描述的格式。如果要使用除最新版本之外的版本，则可以选择包含清单对象的版本 ID。

1. 选择**下一步**。

1. 在**操作**部分，选择**还原**。

1. 在**还原**部分，对于**还原源**，选择 **Glacier Flexible Retrieval 或 Glacier Deep Archive** 或 **Intelligent-Tiering 归档访问层或深度归档访问层**。

   如果您选择 **Glacier Flexible Retrieval 或 Glacier Deep Archive**，则为**还原的副本可用的天数**输入一个数字。

   对于**检索层**，选择要使用的层。

1. 选择**下一步**。

1. 

   在**配置其他选项**页面上，填写以下部分：
   + 在**其他选项**部分，提供任务的描述并指定该任务的优先级编号。编号越大，优先级越高。有关更多信息，请参阅 [分配任务优先级](batch-ops-job-priority.md)。
   + 在**完成报告**部分中，选择批量操作是否应创建完成报告。有关完成报告的更多信息，请参阅[完成报告](batch-ops-job-status.md#batch-ops-completion-report)。
   + 在**权限**部分，您必须向 Amazon S3 授予代表您执行批量操作的权限。有关所需的权限，请参阅[授予批处理操作的权限](batch-ops-iam-role-policies.md)。
   + （可选）在**任务标签**部分，以键值对方式添加标签。有关更多信息，请参阅 [使用标签控制访问和标记任务](batch-ops-job-tags.md)。

   完成后，选择**下一步**。

1. 在 **Review (审核)** 页面上，验证设置。如果需要进行更改，请选择 **Previous**。否则，请选择**创建任务**。

有关批量操作的更多信息，请参阅[使用批量操作还原对象](batch-ops-initiate-restore-object.md)和[创建 S3 批量操作任务](batch-ops-create-job.md)。

## 检查还原状态和到期日期
<a name="restore-archived-objects-status"></a>

您可以使用 Amazon S3 控制台、Amazon S3 事件通知、AWS CLI 或 Amazon S3 REST API 查看还原请求的状态或到期日期。

**注意**  
从 S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 存储类还原的对象仅存储您指定的天数。以下过程将返回这些副本的到期日期。  
从 S3 Intelligent-Tiering 存档访问和深度存档访问存储层还原的对象没有到期日期，而是移回到频繁访问层。

### 使用 S3 控制台
<a name="restore-archived-objects-status-console"></a>

**在 Amazon S3 控制台中检查对象的还原状态和过期日期**

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在存储桶列表中，选择包含待还原对象的存储桶的名称。

1. 在**对象**列表中，选择要还原的对象。此时将显示对象的详细信息页面。
   + 如果还原未完成，则在页面顶部，您会看到一个部分显示**正在还原**。
   + 如果还原已完成，则在页面顶部，您会看到一个部分显示**还原完成**。如果您从 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 中进行还原，则此部分还会显示**还原过期日期**。在该日期，Amazon S3 将删除归档对象的已还原副本。

### 使用 Amazon S3 事件通知
<a name="restore-archived-objects-status-event-notifications"></a>

通过使用 `s3:ObjectRestore:Completed` 操作与 Amazon S3 事件通知特征，您可以收到对象还原完成的通知。有关启用事件通知的更多信息，请参阅 [Enabling notifications by using Amazon SQS, Amazon SNS, and AWS Lambda](how-to-enable-disable-notification-intro.md)。有关各种 `ObjectRestore` 事件类型的更多信息，请参阅[SQS、SNS 和 Lambda 支持的事件类型](notification-how-to-event-types-and-destinations.md#supported-notification-event-types)。

### 使用 AWS CLI
<a name="restore-archived-objects-status-cli"></a>

**使用 AWS CLI 检查对象的还原状态和过期日期**  
以下示例使用 `head-object` 命令查看桶 `amzn-s3-demo-bucket` 中对象 *`dir1/example.obj`* 的元数据。当您对正在还原的对象运行此命令时，Amazon S3 会返回还原是否正在进行以及（如果适用）过期日期。

```
aws s3api head-object --bucket amzn-s3-demo-bucket --key dir1/example.obj
```

预期输出（还原正在进行中）：

```
{
    "Restore": "ongoing-request=\"true\"",
    "LastModified": "2020-06-16T21:55:22+00:00",
    "ContentLength": 405,
    "ETag": "\"b662d79adeb7c8d787ea7eafb9ef6207\"",
    "VersionId": "wbYaE2vtOV0iIBXrOqGAJt3fP1cHB8Wi",
    "ContentType": "binary/octet-stream",
    "ServerSideEncryption": "AES256",
    "Metadata": {},
    "StorageClass": "GLACIER"
}
```

预期输出（还原已完成）：

```
{
    "Restore": "ongoing-request=\"false\", expiry-date=\"Wed, 12 Aug 2020 00:00:00 GMT\"",
    "LastModified": "2020-06-16T21:55:22+00:00",
    "ContentLength": 405,
    "ETag": "\"b662d79adeb7c8d787ea7eafb9ef6207\"",
    "VersionId": "wbYaE2vtOV0iIBXrOqGAJt3fP1cHB8Wi",
    "ContentType": "binary/octet-stream",
    "ServerSideEncryption": "AES256",
    "Metadata": {},
    "StorageClass": "GLACIER"
}
```

有关 `head-object` 的更多信息，请参阅《AWS CLI 命令参考》**中的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/head-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/head-object.html)。

### 使用 REST API
<a name="restore-archived-objects-status-api"></a>

Amazon S3 提供了一个 API 操作供您检索对象元数据。要使用 REST API 检查归档对象的还原状态和过期日期，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)。

## 升级正在进行的还原的速度
<a name="restore-archived-objects-upgrade"></a>

在还原过程中，您可以升级还原的速度。

**将正在进行的还原升级到更快的层级**

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择**存储桶**。

1. 在**存储桶**列表中，选择包含您想要还原的对象的桶的名称。

1. 在**对象**列表中，选择要还原的对象。此时将显示对象的详细信息页面。在对象的详细信息页面上，选择**升级检索层**。有关检查对象还原状态的信息，请参阅[检查还原状态和到期日期](#restore-archived-objects-status)。

1. 选择要升级到的层，然后选择**启动还原**。