iMacに保存されているデータをAmazon Glacierに定期バックアップする。
Amazon Glacierは、長期バックアップに最適なストレージで、非常に低コストであることが特徴である。費用はリージョンごとに異なり、バージニアリージョンであれば0.007USD/GB、東京リージョンであれば0.0114USD/GB、1TBのデータを保存しても月額800円程度と安価である。Glacierは、データをアーカイブとして保存するため、アップロード後にデータを改変することができない。S3ではデータの保存先にGlacierを指定することが可能で、ライフサイクル設定によりデータを定期的にGlacierにアーカイブ可能となっている。
AWS CLI のインストール
MacからAWSにアクセスするためには、コマンドラインツールであるAWS CLIの利用が便利である。AWS CLIは、pip(Pythonパッケージ管理システム)からインストールが可能である。
$ sudo pip install awscli Downloading six-1.10.0-py2.py3-none-any.whl Installing collected packages: pyasn1, rsa, futures, jmespath, six, python-dateutil, docutils, botocore, s3transfer, colorama, awscli Found existing installation: six 1.4.1 DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project. Uninstalling six-1.4.1: Exception: Traceback (most recent call last): File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 209, in main status = self.run(options, args) File "/Library/Python/2.7/site-packages/pip/commands/install.py", line 317, in run prefix=options.prefix_path, File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 726, in install requirement.uninstall(auto_confirm=True) File "/Library/Python/2.7/site-packages/pip/req/req_install.py", line 746, in uninstall paths_to_remove.remove(auto_confirm) File "/Library/Python/2.7/site-packages/pip/req/req_uninstall.py", line 115, in remove renames(path, new_path) File "/Library/Python/2.7/site-packages/pip/utils/__init__.py", line 267, in renames shutil.move(old, new) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move copy2(src, real_dst) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2 copystat(src, dst) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat os.chflags(dst, st.st_flags) OSError: [Errno 1] Operation not permitted: '/tmp/pip-oO8sKD-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'
上記のようにsixが既にインストールされているという警告が出てインストールできない場合は、以下のコマンドでインストールを行う。
$ sudo pip install awscli --upgrade --ignore-installed six
インストール完了後は、認証情報の設定を行う。AWS Access Key IDやAWS Secret Access Keyなどの認証情報は、AWSマネージメントコンソールのAWS Identity and Access Managementから設定が可能である。
$ aws configure AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxxxxx AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxx Default region name [None]: ap-northeast-1 Default output format [None]: json
S3初期設定
S3の設定を行い、データを格納するバケットの生成および、Glacierへバックアップを行うライフサイクル設定をする。安価にデータをバックアップするという目的でGlacierを使用することから、今回は単価が最も安いバージニアリージョンをする。
バケットの生成
バケットを生成する。
このときAWS CLIに設定したユーザにS3へのアクセス権限がないとエラーが発生する。
$ aws s3 mb s3://backup-hoge --region us-east-1 make_bucket failed: s3://backup-hoge/ A client error (AccessDenied) occurred when calling the CreateBucket operation: Access Denied
そこで、AWSマネージメントコンソールのAWS Identity and Access Managementで、該当ユーザにAmazon S3 Full Access権限を付与する。
また、S3のバケット名はユニークである必要があるので、既に同一名称のバケットが存在する場合は、下記のようなエラーが発生するので注意が必要である。
$ aws s3 mb s3://backup-hoge --region us-east-1 make_bucket failed: s3://backup-hoge/ A client error (BucketAlreadyExists) occurred when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.
ライフサイクル設定
次にライフサイクル設定で、どの程度の頻度でGlacierへアーカイブするかを設定する。
今回は、以下の設定としている。
設定内容 | JSON |
---|---|
即日アーカイブする | “Days”: 0″ |
特定のディレクトリに限定することなくバケット全体をアーカイブする | “Prefix”: “” |
Glacierへアーカイブする | “StorageClass”: “GLACIER” |
このとき、「”Prefix”: null」とすると、フォーマットエラーとなる。
vi /tmp/lifecycle.json { "Rules": [ { "Status": "Enabled", "Prefix": "", "Transition": { "Days": 0, "StorageClass": "GLACIER" }, "ID": "backup for xxx" } ] }
JSONが作成できたら、ライフサイクル設定の反映を行う。
aws s3api put-bucket-lifecycle --bucket backup-hoge --lifecycle file://lifecycle.json
同期処理
同期処理は以下のコマンドにより実行できる。deleteオプションによりファイル削除も同期される。また、excludeオプションによって同期対象外のファイルやフォルダを指定できるので、.DS_Storeファイルなどを指定しておくと良い。excludeオプションは、条件の数だけいくつでも追記できる。
aws s3 sync /Volumes/hoge/ s3://backup-hoge --delete --exclude '*.DS_Store'