自宅PCのバックアップを目的とした３大クラウドのアーカイブストレージを比較してみる

# 初めに

HDDの挙動が怪しく念のためバックアップを取っておかねば...となりました。
数百GB以上となるとOneDriveやGoogle Driveを見る限り年間1万円を超えてしまいます。
(安いか高いかは人によって感覚は違うと思いますが)

今回のバックアップとしてはアーカイブストレージが目的と合致する上にコストが低く抑えられるので、
3大クラウドのサービスで比較してみることにしました。

利用したことのあるのは３大のクラウドのうち実質AWSのみ、
かつアーカイブストレージは使ったことないので実際に使ってみてではなくサービスの説明を見てという形です。
読んで明らかな間違いがありましたらご指摘いただければと思います。

また料金等の情報は記事投稿時点(2020/06/08)に準じます


# 注意書

あくまで僕の今回の用途で金額を重視した場合に限った限定的な比較ですので、
実際に業務や個人で使う場合は各々サービスの特徴を把握したうえで使っていただければと思います。
実際GCPでは通信料が多く程単価が安くなりますし、Azureは予約要領でお安く契約ができます。
また、必要な部分の値段をざっくり見ただけなので、
こっちだとこういうのがあるよ！とかダウンロード/アップロードは実測値的にここが早いよ！というのがあると思います。


# アーカイブストレージの特徴

ざっくり制約が多い代わりにめっちゃストレージ単価が安いです。
以下例はAWSのS3で書きます。

## メリット

### 容量単価が安い

保存地域さえこだわりがないのであれば`$0.001GB/month`を下回ります。
500GB保存したとしても年間600円ちょっとくらいです。

以下にS3(AWS)の標準ストレージとGlacier Deep Archiveの料金比較を記載します(全て`GB/month`)

|                   |標準(50TB以下)|Glacier Deep Archive|
|-------------------|--------------|-------------------|
|ap-northeast-1(東京)|$0.025       |$0.002|
|us-east-2(オハイオ) |$0.023       |$0.00099|


https://aws.amazon.com/jp/s3/pricing/

## 制約・デメリット

### 取り出しに時間がかかる

> https://aws.amazon.com/jp/s3/storage-classes/?nc=sn&loc=3
> 取り出し時間は 12 時間以内

なので長期保管は必要だけどなにかあった場合にすぐ取り出したい！というデータは向きません。

### 最小保存期間が存在する

> https://aws.amazon.com/jp/s3/pricing/?nc=sn&loc=4
> S3 Glacier と S3 Glacier Deep Archive にアーカイブされるオブジェクトには、それぞれ最小 90 日間と 180 日間のストレージがあります。90 日間および 180 日間が経過する前にオブジェクトが削除された場合、残りのストレージ料金が日割りで請求されます。(中略)最小ストレージ期間より長く保存されたオブジェクトについては、最小リクエスト料金が発生しません。


一回保存した時点で請求のタイミングはともかくとして一定期間分の料金が発生します。
なので変更のないデータの長期的な保管としては適しますが、変更のあるデータの保管には向かないですね。

### データの取り出しに追加料金がかかる

同サービスの標準ストレージの取り出しにも通信料・操作に対して料金自体がかかりますが、
それとは別に取り出すデータ量に対して追加の料金がかかります。

# なぜアーカイブストレージをバックアップ用途に選んだのか

今回は以下の理由からデメリットを十分受領もしくは無視できるためです。
絶対に業務本番マシンの設定ファイルをこんなところに突っ込まないでください。

- 今回バックアップの対象とするデータの大部分は常に追加のみで変更・削除はない
    - CDのアルバムのデータ等
    - 細々した変更のあるデータは大した容量でもない(別管理でOK)、もしくは飛んでも問題ないやつ
        - 大した容量でないなら変更前も残したまま全量追加で突っ込む手もありそう
- 復旧が遅くなっても困るデータではない

# 比較

今回個人的に求めてる部分かつ数値的に比較できそうなもののみ記載します。
なので可用性やレイテンシ等求めてないものは記載しないです。
あとどうせAPI使うと思うのでぱっと見のAPIの使い勝手も少し見ておきます。

## 対象サービス

- AWS: [S3 Glacier Deep Archive](https://aws.amazon.com/jp/glacier/)
- GCP: [Cloud Storage Archive Storage](https://cloud.google.com/storage/archival?hl=ja)
- Azure: [Azure Storage ブロック BLOB アーカイブ](https://azure.microsoft.com/ja-jp/pricing/details/storage/blobs/)

各サービスとももうちょっと制約緩めのもありますが今回は対象外です。

## 耐久性と冗長性

どのサービスも単一のDC(もしくはそれに近い概念で)
年間99.999999999%以上の耐久性となるように設計されているみたいです。

一応どのサービスも複数リージョンへのレプリケーションが可能なためより高めることもできます。


## AWS

デフォルトで3か所のAZ(地理的に離れたDCの集合体)に保存されます。
選択肢は単一リージョンに保存するか複数リージョン [^1] に保存するかのみです。
なので火災など単一AZに対する災害でもデータは十分守られます。

[^1]: 複数リージョンへの保管は明示的に料金表に存在しませんが[クロスリージョンレプリケーション](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/replication.html)を利用すればできます。追加で保存先の地域に基づく料金がかかります

> 複数のアベイラビリティーゾーンにわたってオブジェクトに耐久性 99.999999999% を達成するよう設計

日本語難しい。
最初3AZ合わせて99.999999999%となるようにとらえたんですが、
いくつかの記事を読んでる限りどこもそれぞれのAZで確保されているっぽい説明で書いてる。
機会があったら念のためAWSに質問してみたい。



### GCP

単一のリージョンか、複数リージョン(マルチリージョン・デュアルリージョン)の選択肢があります。

> https://cloud.google.com/storage/docs/locations?hl=ja
> バケットの作成時にオブジェクト データを保存するロケーションを指定します。ロケーションには次の種類があります。
>    リージョンは、ロンドンなどの特定の地理的な場所となります。
>    デュアルリージョンは、フィンランドやオランダなどのリージョンの特定のペアです。
>    マルチリージョンは、米国などの、2 つ以上の地理的な場所を含む広い地理的なエリアとなります。

[バケットのロケーション](https://cloud.google.com/storage/docs/locations?hl=ja)等を確認してみましたが、
単一のリージョンでどう保存されているかについては情報が見当たりませんでした。
単一のDC障害とかでも耐えられるような感じになってるのだろうか。
だれか詳しい人いませんか。


### Azure

色々ありました。

- 単一のDCのみに保存する(LRS)
- 単一リージョン複数可用性ゾーン(AWSで言うAZ?)に保存する(ZRS)
    - ただしアーカイブストレージでは選択肢できないっぽい
- ２リージョンでそれぞれLRSとして保存する(GRS)
- ２リージョンでそれぞれZRSとして保存する(GZRS)
    - ただしアーカイブストレージでは選択肢できないっぽい

また事前支払いで予約することでコスト削減ができるみたいですが、
100TB or 1PBで巨大すぎるので今回は対象外です。

Azureはどう冗長化するかによってどこまでの耐久性を持つか記載されています。
めちゃくちゃ親切。
https://azure.microsoft.com/ja-jp/pricing/details/storage/

## 料金

ざっと見ストレージ単価が高いのはどこも米国東部っぽいです。
なので国内と米国東部で比較をします。

- 断りのない限り米国東部に属する地域は米国東部として記載し、日本地域は日本と集約します
- 米国東部に該当するリージョンが複数存在するものは基本的に最もストレージ単価が安い地域を指定します
    - 転送料金等もストレージ単価が安い方に従います
- 通貨は全てUSDとします
    - Azureは円表記もありますが他とそろえるためにUSDの料金を取り扱います

### ストレージ単価

全て`GB/Month`です。

#### 単一リージョン

|       |AWS     |GCP   |Azure(LRS)|
|-------|--------|------|----------|
|日本    |$0.002 |$0.0025|$0.002    |
|米国東部|$0.00099|$0.0012|$0.00099 |

#### 複数リージョン

サービスの性質として保存する場合です。
自前で複数リージョンに保存するようにするなら適宜単一リージョンの金額から計算してください。

GCPのマルチリージョンのみ日本国内で完結できないのでアジア地域として取り扱います。

|      |AWS[^1] |GCP(マルチリージョン)|Azure(GRS)|
|------|--------|------|----------|
|日本   |$0.004[^2] |$0.004[^3]|$0.004|
|米国内 |$0.00198~|$0.004|$0.00299 |

AWSは自由に保存先の地域を指定できそうです。
GCPは特定の地域内で可能です。ただ具体的にどこの国に、何か所に保存されるか明示的な記載が見当たらないですね...。
Azureのセカンドリージョンは自動決定で以下のペアになってるらしいです。

> ビジネス継続性とディザスター リカバリー (BCDR):Azure のペアになっているリージョン
> https://docs.microsoft.com/ja-jp/azure/best-practices-availability-paired-regions

[^2]: アジア圏内は料金が同じだったのでどこにレプリケーションしてもストレージ料金は変わりません。
[^3]: 記載した通りアジア圏内になります

### オペレーション料金

クラウドサービス触っていない方にはなじみがあまりないかもしれませんが、
通信料とは別に操作自体(ファイルの設置等)に費用がかかります。

これに関しては各サービスはどの操作単位で集約されているか異なるので、
書き込みとリスト操作のみに限定します。
頭にさっと思い浮かべた時に普段使うのはこの操作になりそうですので。
オペレーションの種類と下記やりたいことの一致が取れているか怪しいのでここはちょっと自信がないです。

表は1万件当たりの操作料金です。

|      |AWS |GCP|Azure(LRS)|Azure(GRS)|
|------|----|---|----------|----------|
|日本(書込み)   |$0.65 |$0.05|$0.1142|$0.2692|
|日本(リスト)   |$0.65 |$0.05|$0.05|$0.10|
|米国東部(書込み) |$0.50|$0.05|$0.10 |$0.21 |
|米国東部(リスト) |$0.50|$0.05|$0.05 |$0.10 | 

AWSは課金単位が1000リクエスト単位なので10倍しています。
AWSがちょっとお高めですね。
GCPは書き込み・リストの場合5000req/monthは無料らしいです。
(厳密にはクラスAオペレーション内。クラスBも別で5000req/monthの無料枠がある)

### 通信料金

上り(アップロード)はどこも無料です。
以下は自宅内等クラウド外への下り(ダウンロード)の費用で、1GBあたりの料金です。

|      |AWS |GCP|Azure|
|------|--------|------|----------|
|日本   |$0.114 |$0.12|$0.12|
|米国東部 |$0.09|$0.12|$0.087 |

AWSは1GB/Monthまで、Azureは5GB/Monthまで無料です。
GCPの料金は送信先が日本前提で1TB以下の場合の値段です。転送量が多くなると安くなりますが月1Tも超えない。
Azureの料金はAzure Storageのページにはなく[帯域幅の料金詳細](https://azure.microsoft.com/ja-jp/pricing/details/bandwidth/)として別に存在しました。

### 取り出し料金

通信料やオペレーション料とは別に取り出すデータに対して料金がかかります。


|AWS(標準)|AWS(大容量)|GCP|Azure(標準)|Azure(高速)|
|--------|-----------|---|-----------| ---------|
|\$0.02  | $0.0025|$0.05 | \$0.022 | $0.0725|



Azureは\$0.02/GBの標準取り出しと、\$0.05/GBと高速取り出しがありました。
AWSは表現が逆で、時間のかかる取り出しが\$0.0025で、通常の取り出しが$0.02でした。

## 取り出しにかかる時間

認識祖語の内容に書いておくとダウンロードにかかる時間ではなく、
ユーザが取り出し可能になる領域への取り出し時間ってやつです。

具体的にどうするかはサービスごとに違うと思いますが、
Azureのこの説明が何となく伝わりやすかったです。

> https://docs.microsoft.com/ja-jp/azure/storage/blobs/storage-blob-rehydration?tabs=azure-portal
> アーカイブ ストレージ内のデータを読み取るには、まず、BLOB の層をホットまたはクールに変更する必要があります。 このプロセスはリハイドレートと呼ばれ、完了までに数時間かかることがあります。


|AWS |GCP|Azure|
|--------|------|----------|
|5~12時間or3~5時間 |不明|最大15時間or最大1時間|

これについては正確な情報がAzure以外得られなかったので、
参考程度にお願いします。
orになっているのは取り出し方法次第で変わるからです(早い方が高い)

AWSですがGlacierの情報となりこれがGlacier Archiveにも適用されるか不明です。
GCPに関してはもはや記載を見つけることができなかったです。
仮に即時取り出しできるならかなりのメリットだと思います。

## 最短保存期間

最初の方に書いた通り、
一定期間(下記記載)の日数未満で削除と化された場合は残りの日数分のストレージ料金が加算されます。

|AWS |GCP|Azure|
|--------|------|----------|
|180日 |365日|180日|

# 所感

正直理由を付けてAWS以外のサービス以外を使うつもりだったんですが、
今回に関してAWS以外はないなという結論になりました。

割合的に最もかかるであろうストレージ料金に最も比重を置いてみると、
AWS or Azure(LRS)になるのですが、AWSは3AZであり実質Azure(GRS)以上という点を考えるとAWSになりました。
単一リージョンに置く想定です(マルチリージョンはさすがにHDDのバックアップとしては過剰)。

オペレーション料金はAWSが段違いに高いですが、
今回に関してはそんなにファイル数がなく(正確には一定のフォルダ単位で圧縮する)、
おそらく上げて数百ファイル/month程度なので、最低課金単位?の1000リクエストの料金で済むだろうと思っています。
AWS以外は最低単位が10000req/monthみたいなので1000req/monthを下回る場合そんなに変わらないはず。

一発目はちょっとあげる量が多いですがその他ランニングコストで十分リターンがあると思います。
逆に大量のログファイルを圧縮せずに大量に上げ続けるみたいな用途だとちょっと悩む要素ではあるかもしれないです。