我が家ではSynology NAS DS224+を利用して写真やドキュメントを保存しています。 特に写真はTBレベルの容量になっており、この写真たちのバックアップ先を探していました。

自分のバックアップの条件を満たすために、Dockerコンテナを利用してS3 Glacier Deep Archiveクラスにバックアップすることとしました。

この記事では、SynologyNAS上のデータをS3にバックアップする方法を紹介します。

はじめに

まず自分のバックアップの条件としては下記です。

  • 費用は可能な限り抑えたい
  • 災害にも対応できるように自宅以外(遠隔地)に保管したい
  • バックアップファイルは滅多に参照しない(リストア以外で参照しない)
  • あくまで個人用ファイルなので、リストアに時間がかかっても問題ない
  • jpg/png/mp4など、データのフォーマットのまま保管したい
  • SynologyNASとバックアップ先のディレクトリ構造を一緒にしたい

結論としては、これらの条件をすべて満たすものとして、Dockerコンテナを利用してAWS CLIを利用し、Amazon S3のGlacier Deep Archiveクラスにバックアップすることを決めました。

なぜAmazon S3を利用するのか

これは単純に費用が安いからです。また、簡単に遠隔地(例えばアメリカ)にデータを保管できます。

単純なストレージ料金は、米国西部(オレゴン) us-west2で、USD 0.00099/GB = USD 1.01376/TBです。 1$=155円だとした場合、1TBで157円です。安いですね。

実際にはデータ取り出し料金などもあるので、ストレージ料金だけでは正確ではないのですが、ランニング費用としてはこの程度です。

なぜDockerコンテナを利用するのか?

Synologyには、Hyper BackupやGlacier Backupといったバックアップアプリが存在します。

特にGlacier BackupではS3 Glacierに簡単にバックアップすることが可能です。

一方で、S3 Glacierの利用はすでにAWS社から推奨されていません(Amazon S3のGlacierクラスを利用することが推奨されている)。

また、S3 Glacierではディレクトリ構造が特殊になってしまうため、AWS-CLIを利用して直接バックアップすることにしました。

事前準備

ここから、バックアップの方法を説明していきますが、まず事前準備として下記を行います。

  • AWSのアカウント作成
  • Amazon S3上にバケットを作成
  • S3のバケットにアクセスできるシステムユーザをIAMで作成
  • システムユーザのアクセスキーを発行
  • Synology NASでContainer Managerを導入

このあたりの説明は割愛します。 もしわからなければ、多くのサイトで丁寧に説明されているので調べてください。

Synology NASでイメージの取得

まず、DSM上でContainer Managerからamazon/aws-cli:latestイメージをダウンロードします。

Container Managerを起動して、「レジストリ」タブをクリックして、amazon/aws-cliをダウンロードしてください。 タグはlatestで良いです。

コンテナの作成

コンテナを作成していきます。

Container Managerを起動して、「コンテナ」タブをクリックして、「作成」ボタンをクリックします。

全般設定

下記を指定して「次へ」ボタンを押下します。

  • イメージ名:amazon/aws-cli:latest
  • コンテナ名:任意
全般設定

詳細設定

[ポート設定]

変更不要です。

 

[ボリューム設定]

自分は/photoディレクトリ以下のすべてのファイルをそのままバックアップしたいので、/photoディレクトリを/appにマウントします。 読み取り専用でOKです。

詳細設定-ボリューム

もし/photo以外に/musicもバックアップしたいなどがあれば、下記のようにマウントしましょう。

  • /photo/app/photo
  • /music/app/music

 

[環境]

システムユーザーのアクセスキーを追加します。

  • AWS_ACCESS_KEY_ID: 取得したアクセスキーを入力
  • AWS_SECRET_ACCESS_KEY: 取得したシークレットキーを入力
詳細設定-環境

 

[機能]

変更不要です。

 

[ネットワーク]

変更不要です。bridgeモードで問題ありません。

 

[実行コマンド]

下記のコマンドを入力してください。

1
s3 sync --exclude *@eaDir/* --storage-class DEEP_ARCHIVE /app/ s3://your-bucket-name/
コマンド/オプション 概要
s3 sync S3に対象のディレクトリを同期します
–exclude @eaDir/ Synologyでは、@eaDirというサムネイル用のディレクトリが作成されますが、バックアップには不要なので除外しています
–storage-class DEEP_ARCHIVE Deep Archiveクラスを指定します
/app/ s3://your-bucket-name/ /app/ディレクトリを指定したバケットに同期します

/apps3://your-bucket-name/はボリューム設定で指定したマウント先の名前と、S3上に作成したバケット名を自分に入れてください。

 

[リンク]

変更不要です。

実行スケジュールの設定

上記で作成したコンテナを実行することでデータのバックアップが可能になります。

手動で起動するのはめんどくさいので、タスクスケジューラを利用して定期実行するようにします。

「コントロールパネル」→「タスクスケジューラー」に移動します。「作成」→「予約タスク」→「ユーザ指定のスクリプト」をクリックします。

[全般]

  • タスク名:任意
  • ユーザ:任意(※dockerの権限が必要です。特にシステムユーザーを個別に作成していない場合はrootでも良いです)
タスク-全般

[スケジュール]

任意の間隔で設定します。下の画像では毎週月曜日です。

タスク-スケジュール

[スケジュール]

「ユーザ指定のスクリプト」に下記を挿入します。 <container name>には、S3にバックアップするために作成したコンテナ名を入力します。

1
docker container start <container name>
タスク-タスク設定

ここまでで、スケジュール実行の設定が完了しました。

まとめ

この記事では、SynologyNASのデータを定期的にS3のGlacier Deep Archiveクラスでバックアップする方法を紹介しました。

バックアップ自体は、Dockerコンテナを利用しており、Dockerコンテナをスケジュール実行して実現しています。

今どきのNASではDockerを動かせますが、本当に便利ですね。