概要
ふと、MacのローカルファイルをS3にバックアップしようと思ったので。
TimeMachineも併用しているけど、S3にバックアップする利点として以下がある
- インターネット経由でバックアップできる
- TimeMachineに接続できない環境の時にもバックアップできる
- 作成されてから期間が経過したファイルを低価格のストレージに移行したり、アーカイブできる
-
aws s3 sync
を使うことで簡単にローカル・リモートが同期できる
aws-cliが使える環境であればすごく簡単にできる。
今回やるもの
- MacにあるローカルディレクトリをS3にバックアップする
-
aws-cli
を使ってS3と同期する -
cron
を使って定期的に同期を行う - S3のライフサイクル設定などファイル同期後の諸々は書きません
前提
- Macでの動作だけ確認
-
aws-cli
が実行可能な状況にしておく - S3にバケットを作成しておく
- S3にアクセスするIAMユーザまたはロールが
aws-cli
にセットされている状態にしておく
手順
shellの作成
s3にバックアップする処理をシェルを作成
vim ~/backup-to-s3.sh
#!/bin/zsh -l
// ~/Downloadsフォルダを同期する例
// 配下のディレクトリも再帰的にすべて同期してくれる
aws s3 sync ~/Downloads s3://[バケット名]/Downloads --profile=[aws-cliに設定したprofile名]
chmod 755 ~/backup-to-s3.sh
cronの設定
crontab -e
// 毎時30分に実行する例
30 * * * * /bin/zsh -l -c '/Users/xxxxxxxxx/backup-to-s3.sh > /Users/xxxxxxxx/backup-to-s3.log 2>&1'
cronでディレクトリアクセスできるようにする
Macの場合、デフォルトだとcron実行時にディレクトリアクセスが制限され、ファイル読み込みができない。
以下の手順でcron実行時のファイルアクセスを許可する必要がある
システム環境設定 -> セキュリティとプライバシー -> プライバシー -> フルディスクアクセス を開く
左下の鍵マークをクリックし、鍵を解除
+
ボタンを押す
Finderが開くので、ここで Command + Shift + G
を押す
フォルダの場所を入力 で /usr/sbin/cron
を入力
移動
を選択 -> cron
を選択 -> 開く
を選択
cron
が出てくるのでチェック状態にする。
左下の鍵をクリックして鍵をかけた状態にする
これでOK。
試す
これで毎時30分になったタイミングでcronが実行され、指定したディレクトリ(今回の例だと ~/Downloads
) をS3に同期してくれる。
初回実行時は存在するすべてのファイルがアップロードされ、2回目以降は差分更新される。