使用 cli 从 AWS Glacier 检索一个文件

Retrieve one file from AWS Glacier using cli

我已经将数千个视频文件上传到一个 S3 存储桶,然后更改了存储桶管理设置以将文件迁移到 Glacier。我正在尝试检索单个文件并将其复制到我的本地计算机。通常,我遵循说明 here。我使用 S3 管理控制台 select 'Action' 从 Glacier 恢复 selected 文件,然后使用以下命令下载它:

aws s3 cp s3://my-bucket/my_video_file.mp4 .

这按我想要的方式工作,但我想知道是否有一种方法可以从 Glacier 恢复文件,而无需通过 Web 浏览器登录并手动 select 进行检索。查看 aws s3 cp 的文档,有一个名为 --force-galcier-transfer 的选项,但是当我将它包含在我的命令中时,我得到以下信息:

Object is of storage class GLACIER. Unable to perform download operations on GLACIER objects. You must restore the object to be able to perform the operation. See aws s3 download help for additional parameter options to ignore or force these transfers.

这是来自the manual page的命令中的段落:

--force-glacier-transfer (boolean) Forces a transfer request on all Glacier objects in a sync or recursive copy.

是否可以通过单个 cli 命令从 glacier 检索和下载单个文件,或者我是否总是需要先使用管理控制台检索文件?如果可以的话,我也愿意使用 python 脚本或类似的东西。

您可以使用 CLI 从 glacier 恢复文件,但是无法在单个命令中同时恢复和下载它,因为您需要从 glacier 恢复文件,然后再过一段时间,也许几小时后,还原完成后,下载文件。

要恢复文件,请使用如下命令:

aws s3api restore-object --bucket bucketname --key path/to/object.zip --restore-request '{"Days":25,"GlacierJobParameters":{"Tier":"Standard"}}'

您可以使用如下命令检查恢复请求的状态:

aws s3api head-object --bucket bucketname --key path/to/object.zip

这将输出一个 json 对象,其中包含 S3 对象的详细信息,包括状态:

.... While the restore is still in progress ...
    "Restore": "ongoing-request=\"true\"",
.... Or, when the restore is done ...
    "Restore": "ongoing-request=\"false\", expiry-date=\"...\"",

从那里开始,它是 S3 中的一个对象,您只需将其复制到本地计算机即可:

aws s3 cp s3://bucketnamepath/to/object.zip object.zip

当然,编写所有这些脚本是可能的。 Python 中的 boto3 使遵循相同的模式变得相当简单,但几乎可以用您喜欢使用的任何语言来做到这一点。