amazon-web-services - 从 Amazon Glacier 恢复数据

标签 amazon-web-services amazon-s3 amazon-glacier

是否有命令行方式可以从 Glacier 恢复数据?
到目前为止,我已经尝试过:

s3cmd restore --recursive s3://mybucketname/folder/

aws s3 ls s3://<bucket_name> | awk '{print $4}' | xargs -L 1 aws s3api restore-object --restore-request Days=<days> --bucket <bucket_name> --key

但是,没有帮助。
PS:我知道我们可以通过控制台来做到这一点。

最佳答案

您可以使用较低级别的 aws s3api命令:

aws s3api restore-object --request-payer requester \
                         --key path/to/key.blob \
                         --bucket my-bucket \
                         --cli-input-json "$(cat request.json)"

然后在 request.json 中设置您的参数, 例如:
{
    "RestoreRequest": {
     "Days": 1,
     "GlacierJobParameters": {
         "Tier": "Standard"
     }
    }
}

启动恢复请求后,您必须调用 head-object确定其恢复状态:
aws s3api head-object --key path/to/key.blob \
                      --bucket my-bucket \
                      --request-payer requester
{
    "AcceptRanges": "bytes",
    "Restore": "ongoing-request=\"true\"",
    "LastModified": "Thu, 30 May 2019 22:43:48 GMT",
    "ContentLength": 1573320976,
    "ETag": "\"5e9bae0592655103e72d0c026e643184-94\"",
    "ContentType": "application/x-gzip",
    "Metadata": {
        "digest-md5": "7ace7afadfaec591a7dcff2b942df701",
        "import-digests": "md5"
    },
    "StorageClass": "GLACIER",
    "RequestCharged": "requester"
}

Restore包含,ongoing-request="false" ,恢复将完成。 S3 中的临时副本将持续您在 restore 命令中指定的持续时间。 StorageClass总是 GLACIER (或 DEEP_ARCHIVE)用于任何恢复的文件,即使在恢复完成后也是如此。这是不直观的。

如果您希望将该副本永久恢复到 S3 中,即,将存储类别从 GLACIER 更改为 STANDARD,则您需要将恢复的副本(可能覆盖其自身)放入/复制到一个新文件中。这很烦人。

有关的:
  • Permanently restore Glacier to S3
  • http://docs.aws.amazon.com/AmazonS3/latest/user-guide/restore-archived-objects.html

  • 注意:--request-payer requester是可选的。我在我的设置中使用它,但如果您是存储桶的所有者,则不需要它。

    关于amazon-web-services - 从 Amazon Glacier 恢复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46670519/

    相关文章:

    amazon-web-services - AWS 将文件上传到 S3 REST API - 此请求缺少必需的 header : x-amz-content-sha256

    python - 给定 archive_id,我如何将存档从 AWS Glacier 移动到 S3 存储桶?

    amazon-web-services - S3 默认使用哪个 Glacier 保管库?

    php - 在 symfony2 中限制每秒 swiftmailer 电子邮件

    linux - 加载共享库时出错 : libsqlplus. 所以:无法打开共享对象文件:没有这样的文件或目录

    amazon-web-services - AWS API Gateway-如何在正文映射模板中获取日期/时间戳/纪元?

    amazon-web-services - CloudFront 策略仅使特定分发无效

    java - 您提供的 AWS 访问 key ID 在我们的记录中不存在 - Java SDK 的凭证失败,但 CLI 则不然

    amazon-web-services - 如何配置automate_aws_accounts_creation_sso_users_assignment.yaml以在我选择的区域中运行?