NASのデータをAmazon S3にバックアップする

# はじめに

写真や動画などのデータが溜まってきたため、我が家もNASを導入しました。主な用途は家族写真の保存。

選定機種は[HDL-AAX4](https://www.iodata.jp/product/nas/personal/hdl-aax/)。あんまり覚えてないけど2万円くらいだったと思います。

一方で、万が一火災などに遭いNASもろとも積み重ねてきたデータが消えてしまうことは避けたいため、DR対策としてクラウドへのバックアップはしておきたいです。

これまではGoogleDriveにも保存していましたが、200GBを超えると一気に月額1,300円の2TBプランとなり流石に気が引けます。そもそもバックアップ用でクラウド上のデータを参照することはないため、目的に対してGoogleDriveなりDropBoxなりを使用するのはリッチすぎます。

そこでS3 Glacier Deep Archiveです。

https://aws.amazon.com/jp/s3/storage-classes/glacier/

> S3 Glacier Deep Archive は、1 年に 1 回未満しかアクセスせず、非同期で取り出される長寿命のアーカイブデータに対して、(S3 Glacier Flexible Retrieval よりも) 最大 75% 低いコストのストレージを提供します。GB あたり月額わずか 0.00099 USD (TB あたり月額 1 USD) で、S3 Glacier Deep Archive は最もコストが低いストレージをクラウドで提供します。この料金は、オンプレミスのテープにデータを保持する場合やオフサイトにデータをアーカイブする場合よりも大幅に低額です。S3 Glacier Deep Archive は、費用効果が高く、管理が容易なテープの代替品です。特に、金融サービス、ヘルスケア、メディアおよび娯楽、パブリックセクターのお客様を対象としており、お客様のニーズを満たし、規制コンプライアンス要件を満たすために 7～10 年以上データセットを保管するように設計されています。S3 Glacier Deep Archive は、物理的に分離された複数の AWS アベイラビリティーゾーンにデータを冗長的に保存することにより、99.999999999% (11 9s) のデータの耐久性と 99.99% の可用性を実現できるように設計されています。

# 料金体系

比較のため、Glacier Deep ArchiveとS3 Standardの2つの月額料金を記載します（東京リージョン）。

以下に記載のある**大容量**とは、取り出しオプションの1つ。オプションによってダウンロード可能になるまでの時間が変わり、大容量は48時間以内、標準は12時間以内に取り出しが可能になる。理由がなければ安価な*大容量*を選択したほうが無難です。

## 保存するとき

||Glacier Deep Archive|Standard|
|:--|:--|:--|
|ストレージ利用料|0.002 USD/GB|0.025 USD/GB（～50TB）|
|リクエスト料（PUT）|0.065 USD/1,000リクエスト|0.0047 USD/1,000リクエスト|
|通信料（インターネット→S3）|無料|無料|

## 取り出すとき

||Glacier Deep Archive|Standard|
|:--|:--|:--|
|リクエスト料（取り出し）|0.025 USD/1,000リクエスト（大容量）|無料|
|取り出し料|0.005 USD/GB（大容量）|無料|
|通信料（S3→インターネット）|0.114 USD/GB（~10TB）|0.114 USD/GB（~10TB）|

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

容量とストレージ利用料の推移をまとめると次のようになります。円換算の為替は150円/USDです。

|サイズ|ストレージ利用料（USD/月）|ストレージ利用料（円/月）|
|:--|:--|:--|
|100GB|0.2 USD/月|30 円/月|
|500GB|1 USD/月|150 円/月|
|1TB|2 USD/月|300 円/月|
|2TB|4 USD/月|600 円/月|
|4GB|8 USD/月|1200 円/月|

GoogleDriveが2TBプランで1,300円/月、DropBoxが2TBプランで1,500円/月なので、保存料だけ考えると結構安上がりです。

# 使い方

## S3バケットの準備

マネジメントコンソール等により、任意の名前のバケットを作成しておきます。アクセス管理はしっかりしておく。

## バックアップするとき

AWS CLIを使ってバックアップします。必要な権限は付与されているものとします。

以下のようなバッチファイルを作成し、ダブルクリックだけで実行できるようにしておくと楽になります。

`sync`サブコマンドによりS3との差分を計算し、S3にないファイルのみ保存されるため、毎回全ファイルがアップロードされることはありません。

自分のNASはファイルを削除したとき、すぐに削除されず一定時間trashboxフォルダに残る設定となっています。trashboxフォルダの中はバックアップされなくてよいため、`--exclude`オプションで対象外に設定しておきます。

また、`--delete`オプションをつけておくことで、NASから削除されたファイルもS3から削除されるようになります。

自分のケースでは面倒くさくてやってないですが、バックアップしたいものによってはtarなどに固めてからバックアップすることで、リクエスト数が減りより料金が抑えられるようになると思います。

```bat
@echo off

aws s3 sync <バックアップ対象のフォルダ> s3://<バケット名> --exclude "*trashbox/*" --delete --storage-class DEEP_ARCHIVE
```

# 実際の請求額

## 保存した月

約65GB・10,000ファイルのデータをアップロードしました。まず理論値を確認します。

（ストレージ利用料）＋（リクエスト料） = 0.002 USD/GB * 65GB + 0.065 USD/1,000リクエスト * 10,000リクエスト = 0.78 USD

当時の為替（150円/USD）で、約117円です。実際の料金をCost Explorerで確認すると……。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/22a89c26-e0db-fc30-2bc2-819b755ff367.png)

若干実績のほうが高いですが、少し実験していた分があるので、だいたい計算どおりです。

## 次の月

次の月に、約23GB・3,800ファイルを追加でアップロードしました。ストレージの合計使用料は88GBです。こちらもまず理論値を確認します。

（ストレージ利用料）＋（リクエスト料） = 0.002 USD/GB * 88GB + 0.065 USD/1,000リクエスト * 3,800リクエスト = 0.42 USD

当時の為替（157円/USD）で、約63円です。実際の料金をCost Explorerで確認すると……。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302427/e9868c18-8e71-863d-b759-44a89e23aa0e.png)

こちらもだいたい計算どおりです。

# おわりに

簡単に使用・運用できるわりに安くクラウドへバックアップできるため、S3 Glacier、おすすめです。コスト異常検出は設定しておきましょう。