如何使用 AWS CLI 从 Amazon Glacier 存储类还原 S3 对象?

上次更新时间:2020 年 3 月 27 日

我使用生命周期配置将一个 Amazon Simple Storage Service (Amazon S3) 对象存档到 Amazon Simple Storage Service Glacier 存储类。如何使用 AWS 命令行界面 (AWS CLI) 还原该对象?

解决方法

如要使用 AWS CLI 从 Amazon S3 Glacier 存储类还原 S3 对象,请遵循下列步骤:

启动还原请求

运行以下命令以启动还原请求。请务必将示例命令中的所有值替换为您的存储桶、对象和还原请求的值。

注意:由于数据检索费用基于请求的数量,因此,请务必确认还原请求中的参数正确无误。

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

运行此命令后,将会有一个临时的对象副本在还原请求中指定的期限(例如在此例中为 25 天)内可用。

请注意,您可以对命令做出下列更改:

  • 如要还原版本控制存储桶中的特定对象版本,请添加 --version-id 选项,然后指定相应的版本 ID。
  • 如果示例中使用的 JSON 语法导致出现 Windows 客户端错误,请使用以下语法替换还原请求:
--restore-request Days=25,GlacierJobParameters={"Tier"="Standard"}

监控还原请求的状态

运行以下命令以监控还原请求的状态:

aws s3api head-object --bucket awsexamplebucket --key dir1/example.obj

运行命令后,如果还原仍在进行中,您会收到类似于以下内容的应答:

{
    "Restore": "ongoing-request=\"true\"",
    ...
    "StorageClass": "GLACIER",
    "Metadata": {}
}

还原完成后,您会收到类似于以下内容的应答:

{
    "Restore": "ongoing-request=\"false\", expiry-date=\"Sun, 13 Aug 2017 00:00:00 GMT\"",
    ...
    "StorageClass": "GLACIER",
    "Metadata": {}
}

请注意响应中的到期日期,在此日期之前,您一直拥有对临时存储对象(存储在“减少的冗余”存储类中的对象)的访问权限。临时对象,以及位于 S3 Glacier 存储类中的已存档对象都可以访问。到期日期结束后,临时对象将被删除。您必须更改临时对象的存储类,临时对象才能过期。要在到期日期之后更改临时对象的存储类,您必须发出一个新还原请求。

将对象的存储类更改为 Amazon S3 标准

要将对象的存储类更改为 Amazon S3 标准,请通过覆盖现有对象,或者将该对象复制到其他位置来运行复制操作。

如要使用 Amazon S3 标准存储类覆盖现有对象,请运行以下命令:  

aws s3 cp s3://awsexamplebucket/dir1/example.obj s3://awsexamplebucket/dir1/example.obj --storage-class STANDARD

如要对整个前缀执行递归复制并使用 Amazon S3 标准存储类覆盖现有对象,请运行以下命令: 

aws s3 cp s3://awsexamplebucket/dir1/ s3://awsexamplebucket/dir1/ --storage-class STANDARD --recursive --force-glacier-transfer

如要将对象复制到其他位置,请运行以下命令:

aws s3 cp s3://awsexamplebucket/dir1/example.obj s3://awsexamplebucket/dir2/example2.obj