我已将数千个视频文件上传到 S3 存储桶,然后更改存储桶管理设置以将文件迁移到 Glacier。我正在尝试检索单个文件并将其复制到我的本地计算机。通常,我会按照此处的说明进行操作。 我使用 S3 管理控制台,选择“操作”从 Glacier 恢复所选文件,然后使用以下命令下载它:
aws s3 cp s3://my-bucket/my_video_file.mp4 .
这按照我想要的方式工作,但我想知道是否有一种方法可以从 Glacier 恢复文件,而无需通过网络浏览器登录并手动选择它进行检索。查看
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.
这是来自手册页的命令段落:
--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 可以相当直接地遵循相同的模式,但几乎可以用您喜欢使用的任何语言来完成此操作。
步骤 1:配置 AWS CLI
aws configure
~/.aws/credentials
中Windows 上为
%USERPROFILE%\.aws\credentials
。”
aws glacier list-vaults --account-id -
第 3 步:启动检索作业
aws glacier initiate-job --vault-name my-vault --account-id - --job-parameters "{\"Type\":\"archive-retrieval\",\"ArchiveId\":\"file_on_aws\",\"Tier\":\"Expedited\"}"
my-vault
替换为您的保管库名称。
file_on_aws
替换为文件的实际
ArchiveId
。
Tier
可以是
"Expedited"
(最贵)、
"Standard"
(默认)或
"Bulk"
,具体取决于您需要文件的速度。
此处。
第 4 步:获取作业 ID 并下载文件jobId
。文件准备好后,使用
jobId
下载文件:
aws glacier get-job-output --vault-name my-vault --account-id - --job-id "jobId" ./output_file
"jobId"
替换为上一步返回的实际作业 ID。
./output_file
是检索到的文件将保存在本地的路径。