AWS S3同步--强制冰川传输

13

几天前我在尝试使用S3和Glacier,我的数据被归档了,所以恢复它时我不得不使用他们的快速服务(需要付费)。我想将所有内容从一个存储桶移动到同一地区、同一帐户下的另一个存储桶。

当我尝试同步数据时,它会给出以下错误: 已完成10.9 MiB/~10.9 MiB(30.0 KiB/s),还剩下 ~0个文件正在计算...警告:跳过文件s3://bucket/zzz0dllquplo1515993694.mp4。该对象的存储类是GLACIER。无法对GLACIER对象执行复制操作。必须恢复对象才能执行此操作。有关附加参数选项以忽略或强制这些传输,请参见aws s3复制帮助。

我正在使用下面的命令,并且我想知道这将花费我多少美元?因为我的所有文件存储类都从“标准”更改为“Glacier”。所以,我被迫使用--force-glacier-transfer标志。

aws s3 sync s3://bucketname1 s3://bucketname2 --force-glacier-transfer --storage-class STANDARD

从我的角度来看,John Eikenberry提供了正确的答案。你为什么不接受它作为你主题的答案呢? - TekTimmy
3个回答

19
如果您已经恢复了它们,并且在到期日期之前,那么您应该能够在无需额外还原的情况下同步它们。由于使用的API不检查是否已恢复,因此所有递归命令都会出现Glacier错误。您可以在添加--force-glacier-transfer的票证中了解相关信息。

https://github.com/aws/aws-cli/issues/1699

当使用--force-glacier-transfer标志时,它不会执行另一个还原操作,而只是忽略API中指示对象在Glacier中的信息并尝试传输。如果对象没有被还原,它将失败(不会尝试还原)。
请注意,这仅适用于递归命令(例如sync和cp/mv与--recursive),如果您只复制一个文件,则无需使用force标志。

3

将Glacier存储类的文件复制到不同的存储桶

你说: "我想将所有内容从一个存储桶移动到同一区域同一帐户中的另一个存储桶。"

如果您想将一个存储在Glacier存储类中的文件从一个存储桶复制到另一个存储桶,即使使用sync命令,您也必须首先恢复文件,即在实际复制之前使文件可用于检索。例外情况是当文件存储在“Amazon S3 Glacier Instant Retrieval”存储类中时,您无需明确恢复文件。

因此,您必须对每个文件发出restore-object命令以启动恢复请求。然后您必须等待恢复请求完成。之后,您将能够在您在恢复请求期间指定的天数内复制您的文件。

检索价格

您还写道: "我想知道这将花费我多少美元。"

使用您提供的命令aws s3 sync s3://bucketname1 s3://bucketname2 --force-glacier-transfer --storage-class STANDARD,您将文件从Glacier复制到Standard存储类。在这种情况下,您首先必须支付检索费用(一次性),然后您将支付(每月)存储文件两个副本的费用:一个副本在Glacier上,另一个副本在Standard存储类中。

根据亚马逊(引用)的说法:

要将对象的存储类更改为Amazon S3标准,请使用复制(通过覆盖现有对象或将对象复制到另一个位置)。

但是,对于存储在Glacier存储类中的文件,您只能将其复制到同一存储桶中的另一个位置,除非您恢复它,即使让其可供检索,您也无法实际检索文件内容。

由于您问了“这将花费我多少美元”,因此您必须按Amazon发布的检索价格和存储价格付款。

您可以在https://aws.amazon.com/s3/glacier/pricing/上查看检索定价。

存储价格在https://aws.amazon.com/s3/pricing/上提供。

检索价格取决于您最初选择的Glacier存储类别:S3 Glacier Instant Retrieval、S3 Glacier Flexible Retrieval或S3 Glacier Deep Archive。存储类别可以通过生命周期规则进行修改,因此更准确地说,每个文件的当前存储类别很重要。

除非您将文件存储在“S3 Glacier Instant Retrieval”存储类中,否则最便宜的选项是使用“Bulk”检索选项(还原层级),先恢复文件(使其可供检索),这是“S3 Glacier Flexible Retrieval”的免费选项,对于“S3 Glacier Deep Archive”来说也非常便宜。因此,如果需要复制文件,则可以最小化恢复成本。
由于您偏好使用命令行,您可以使用Perl脚本,以“Bulk”检索选项(还原层级)使文件可供检索。否则,您提供的aws s3 sync命令将使用“Standard”还原层级。
截至今天,在美国俄亥俄州地区,检索价格如下所示。
对于“S3 Glacier Instant Retrieval”,撰写时恢复每GB费用为$0.03,没有其他选择。 对于“S3 Glacier Flexible Retrieval”,“Standard”检索每GB费用为$0.01,而“Bulk”检索免费。 对于“S3 Glacier Deep Archive”,“Standard”检索每GB费用为$0.02,而“Bulk”费用为每GB $0.0025。
无论数据大小,您也将支付检索请求费用。但是,对于“S3 Glacier Instant Retrieval”,您不必支付检索请求费用;对于“Bulk”,检索请求费用很小(对于S3 Glacier Deep Archive),如果不是免费的(S3 Glacier Flexible Retrieval)。

-1
BUCKET=my-bucket
DATE=$1
BPATH=/pathInBucket/FolderPartitioDate=$DATE
DAYS=5
 for x in `aws s3 ls s3://$BUCKET$BPATH --recursive | awk '{print $4}'`;
 do
  echo "1:Restore $x"
  aws s3api --profile sriAthena restore-object --bucket $BUCKET --key $x --restore-request Days=$DAYS,GlacierJobParam
eters={"Tier"="Standard"};
  echo "2:Monitor $x"
  aws s3api head-object --bucket $BUCKET --key $x;
done

https://aws.amazon.com/premiumsupport/knowledge-center/restore-s3-object-glacier-storage-class/


2
你好,欢迎来到Stack Overflow。当回答问题时,请确保提供的答案有一些额外的见解,说明为什么你所提供的响应是实质性的,而不只是重复原始发布者已经审核过的内容。这在“仅限代码”的答案中尤为重要,比如你所提供的答案。 - chb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接