我将 Amazon Simple Storage Service(Amazon S3)对象存档到 Amazon S3 Glacier Flexible Retrieval 或 Amazon S3 Glacier Deep Archive 存储类。我想要使用 AWS 命令行界面(AWS CLI)恢复对象。
解决方法
**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。
启动恢复请求
运行以下命令以启动恢复请求。请务必将示例命令中的所有值替换为您的桶、对象和恢复请求的值。
**注意:**由于数据检索费用基于请求的数量,因此请务必确认恢复请求的参数正确无误。
$ aws s3api restore-object --bucket awsexamplebucket --key dir1/example.obj --restore-request '{"Days":25,"GlacierJobParameters":{"Tier":"Standard"}}'
检索请求会在 S3 Standard 存储类中创建您数据的一份临时副本,并保持存档数据不变。在此示例中,它创建的副本有效期为 25 天。在低冗余存储的价格低于 S3 Standard 存储的 AWS 区域,临时可用的数据按低冗余存储计费。但是,低冗余计费存储类并不能反映数据的存储方式。
请注意,您可以对命令进行以下修改:
- 要恢复受版本控制的存储桶中的特定对象版本,请添加 --version-id 选项,然后指定相应的版本 ID。
- 对于 S3 Glacier Flexible Retrieval 存储类,您可以使用“加速检索”、“标准检索”或“批量检索”选项。但是,对于 S3 Glacier Deep Archive 存储类,您只能使用“标准检索”或“批量检索”选项。
- 如果示例中的 JSON 语法导致 Windows 客户端出现错误,请将恢复请求替换为以下语法:
--restore-request Days=25,GlacierJobParameters={"Tier"="Standard"}
**注意:**对于存储在 S3 Glacier Instant Retrieval 中的对象,数据检索是即时的,您无需使用恢复操作。有关详细信息,请参阅 Amazon S3 存储类。
监控恢复请求的状态
要监控恢复请求的状态,请运行以下命令:
aws s3api head-object --bucket awsexamplebucket --key dir1/example.obj
如果运行命令后,恢复仍在进行中,则您会收到类似于下列内容的响应:
{
"Restore": "ongoing-request=\"true\"",
...
"StorageClass": "GLACIER | DEEP_ARCHIVE",
"Metadata": {}
}
恢复完成后,您会收到类似于下列内容的响应:
{
"Restore": "ongoing-request=\"false\", expiry-date=\"Sun, 13 Aug 2017 00:00:00 GMT\"",
...
"StorageClass": "GLACIER | DEEP_ARCHIVE",
"Metadata": {}
}
记下响应中的 expiry-date。在此时间之前,您都可以访问存储在 S3 Standard 存储类中的临时存储对象。临时对象与 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类中的存档对象都可使用。expiry-date 之后,Amazon S3 会移除临时对象。在临时对象过期之前,您必须更改对象的存储类。要在 expiry-date 之后更改对象的存储类,请启动新的恢复请求。
将对象的存储类更改为 Amazon S3 Standard
要将对象的存储类更改为 Amazon S3 Standard,请使用 copy。您可以覆盖现有对象,也可以将对象复制到其他位置。
**警告:**如果您使用的是 AWS CLI 的 1.x 版,请在复制对象之前验证多部分阈值是否设置为 5 GB。否则,当对象大小大于 AWS CLI 的多部分阈值时,对象的用户元数据将丢失。要保留大于 5 GB 的对象的用户元数据,请使用 AWS CLI 的 2.x 版本。
(可选)要提高 AWS CLI 的多部分阈值,请运行以下命令:
aws configure set default.s3.multipart_threshold 5GB
要使用 Amazon S3 Standard 存储类覆盖现有对象,请运行以下命令:
aws s3 cp s3://awsexamplebucket/dir1/example.obj s3://awsexamplebucket/dir1/example.obj --storage-class STANDARD
要对整个前缀执行递归复制并使用 Amazon S3 Standard 存储类覆盖现有对象,请运行以下命令:
aws s3 cp s3://awsexamplebucket/dir1/ s3://awsexamplebucket/dir1/ --storage-class STANDARD --recursive --force-glacier-transfer
**注意:**存档到 S3 Glacier Flexible Retrieval 的对象的最短存储期为 90 天。存档到 S3 Glacier Deep Archive 的对象的最短存储期为 180 天。如果您在 90 天的最低期限之前覆盖 S3 Glacier Flexible Retrieval 中的对象,则需要支付 90 天的费用。同样,如果在 180 天之前覆盖 S3 Glacier Deep Archive 中的对象,则需要支付 180 天的费用。
若要将对象复制到其他位置,请运行以下命令:
aws s3 cp s3://awsexamplebucket/dir1/example.obj s3://awsexamplebucket/dir2/example2.obj
**注意:**对于已暂停的桶或启用了版本控制的桶,此步骤将创建额外的对象副本。这些额外对象也会产生存储成本。为避免存储成本,请移除仍在 Amazon S3 Glacier 存储类中的非最新版本。或者,创建 S3 生命周期到期规则。
相关信息
如何为当前位于 S3 Glacier 或 S3 Glacier Deep Archive 存储类的大量 Amazon S3 对象启动恢复?
如何使用 Amazon S3 控制台中的恢复层从 Amazon S3 Glacier 存储类恢复存档的对象?
恢复存档的对象