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

问题描述 投票:0回答:2

我已将数千个视频文件上传到 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 脚本或类似的东西。

amazon-web-services amazon-s3 command-line-interface
2个回答
2
投票

您可以使用 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 可以相当直接地遵循相同的模式,但几乎可以用您喜欢使用的任何语言来完成此操作。


0
投票
要使用 AWS CLI 从 Amazon Glacier 下载文件,请按照以下步骤操作:

步骤 1:配置 AWS CLI

首先,确保您的 AWS CLI 配置了正确的凭证:

aws configure

    这些凭据将保存在 Linux/macOS 上的
  • ~/.aws/credentials
    Windows 上为
  • %USERPROFILE%\.aws\credentials
    。”
第 2 步:列出可用的保管库(可选)

如果您需要检查可用的保管库,请使用以下命令:

aws glacier list-vaults --account-id -
第 3 步:启动检索作业

要从 Glacier 检索文件,您需要启动一项作业。以下是启动从 Glacier 检索文件的命令:

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"
    ,具体取决于您需要文件的速度。
有关更多详细信息,您可以参阅 AWS CLI 文档

此处

第 4 步:获取作业 ID 并下载文件

开始工作后,您将收到

jobId

。文件准备好后,使用 
jobId
 下载文件:

aws glacier get-job-output --vault-name my-vault --account-id - --job-id "jobId" ./output_file

  • "jobId"
     替换为上一步返回的实际作业 ID。
  • ./output_file
     是检索到的文件将保存在本地的路径。
© www.soinside.com 2019 - 2024. All rights reserved.