読者です 読者をやめる 読者になる 読者になる

Amazon Glacier からデータを取り出すときには気をつけようね

amazon

昨日の出来事

Amazon Web Services から6月の請求が来た。

Total: $20.30

あれ、なんか高いぞ・・。 ちなみに先月は 0.18 ドルだった。 やっぱり高すぎる。 内訳を見たら以下のようになっていた。

f:id:takatoshiono:20140704231928p:plain

たしかに先月 Glacier のデータをリストアしたけど、なんだこの 1,633.224 GB というばかでかい数字は・・。こんな大きいデータリストアしてないし、そもそも持ってない。

調べた

Amazon Glacier のリストア料金は「ピーク復元レート」というのに基づいて計算される。ピーク復元レートとは、

  • どのくらいのデータを
  • どのくらいの時間で復元したか
  • その割合のこと

たとえば 100GB のデータを 4 時間で復元したらピーク復元レートは 25 GB になる。そしてこれをベースに1ヶ月の料金が算出される。つまり、ある月にたった一度 100 GB のデータを 4 時間かけて復元しただけで、それを1ヶ月続けた時と同じ料金がかかるということ。これは恐ろしい。

http://aws.amazon.com/jp/s3/faqs/

1 か月の支払い額を計算するには、請求可能なピーク復元レート(3 GB/時間)と復元料金(0.01 USD/GB)と 1 か月の時間数(720 時間)を掛けます。

今回の場合、ピーク復元レート x は以下の式で計算できる(東京リージョンの復元料金は 0.0114 ドル)。

x GB * 24 時間 * 30 日 * 0.0114 ドル/GB = 18.62 ドル
x =2.2685185185184

したがって、先月リストアしたときに約 2.27 GB / 時間 のピーク復元レートでリストアしていたということだ。

ちなみに無料の復元枠というのがあって、

無料で復元できるのは、1 か月当たり、お客様の月平均アーカイブ量の 5% まで(1 日ごとに案分)です。

ということだった。つまりピーク復元レートが無料枠に収まるように時間をかけてリストアできればお金はかからない。でも Amazon S3 のマネージメントコンソールから Storage Class が Glacier になっているオブジェクトを選択して Initiate Restore を選ぶと以下のポップアップが表示されるのだが、

f:id:takatoshiono:20140704232608p:plain

ここにはリストア時間は 3 〜 5 時間と書いてあるだけで、任意の時間は設定できない。したがって大きいファイルをリストアするとピーク復元レートは必然的に上がってしまいそうだった。

調べた(その2)

と、ここまで書いて終わろうと思っていたけど API を使えば無料枠内でリストアできるだろうと思ってもう少し調べたら、以下の URL にしっかり書いてあった。

Downloading an Archive in Amazon Glacier - Amazon Glacier

Range Retrival という言葉で説明されている。

  • リストアするには archive-retrieval というジョブリクエストを送るのだが、
  • 1つのオブジェクトを分割してリストアできるので、
  • それぞれのリクエストによるピーク復元レートが無料枠内に収まるように分割してリクエストを送ればよい

という感じぽい。なるほど〜。

aws/aws-sdk-ruby · GitHub だと AWS::Glacier::Client#initiate_jobtype=archive-retrievalretrieval_byte_rangeを適切に設定してリクエストすればよさそう。

だいたい把握した。

Amazon Web Servicesプログラミング ―APIの基礎からElastic Beanstalkの利用まで

Amazon Web Servicesプログラミング ―APIの基礎からElastic Beanstalkの利用まで

まとめ

  • Amazon Galcier のストレージ料金は安いが
    • 東京リージョンで月に 0.0114 ドル/GB
  • リストア料金は高い

当たり前というか、そうらしいということは知っていたけど、ここまで高くなるとは思わなかったのでビックリしたというお話でした。

また、以下のスライドが大変参考になりました。

Amazon Glacier の落とし穴