この記事で解説すること
この記事ではAWS EC2(AWSCLI)からS3に、特定のディレクトリを毎時間バックアップを取る方法を解説します。前提として、EC2内からS3へアクセスをすることができる状態(エンドポイントが開設されている状態)を想定しております。EC2ーS3間のエンドポイントを作成することができていない方は先にこちらのブログを見てください。
EC2からS3に自動バックアップをする機能を実装する手順
0.パス等が通っていることを確認する。
1.バックアップ用のシェルスクリプトを書く。
2.Cronを書いて、自動的シェルスクリプトを実行する環境を整える。Cronをアクティベートする
3.テストする
それでは一つ一つ、紹介していきます。
0.パス等が通っていることを確認する。
まず、awsCLIが無事稼働しているか、s3を利用することができるか、チェックするために、以下の二つのコードを実行してみてください。
touch test.txt
aws s3 cp test.txt s3://[バケット名]
aws s3 ls s3://[バケット名]
[結果] test.txt
この二つのコードが無事実行することができたら、EC2のバックアップをS3にあげる準備はできています!
1.バックアップ用のシェルスクリプトを書く。
シェルスクリプトを作成します。以下をコピーし、実行してください。
vim ~/backup.sh
echo "start"
aws s3 rm s3://[バケット名]/`date '+%Y%m%d'`/ --recursive
aws s3 sync /home/ec2-user/`date '+%Y%m%d'` s3://[バケット名]/`date '+%Y%m%d'`
echo "finish"
この例では、ローカルないのその日の日付(例)20200520のディレクトリの中身を、S3のその日の日付のディレクトリないにバックアップをとっています。一度rmでリモートのディレクトリ内を削除し、コピーし直すことで、S3のデータ量を節約しています。
--recursiveは、ディレクトリレベルでのコピーや削除をする時に必要になるオプションです。バケット内のディレクトリを閲覧、削除に苦戦している人はこれを試してみてください。
また、以下のコードも実行し、シェルスクリプトにs3周りのファイルを取り扱うためのパーミッションを与えてください。
chmod 755 backup.sh
以上でシェルスクリプトの作成は完了です。
2.Cronを書いて、自動的シェルスクリプトを実行する環境を整える。
vim cron.conf
以下を参考にcron.confを編集してください
*/5 * * * * ~/backup.sh # 5分おきに実行
0,30 * * * * ~/backup.sh # 0分と30分に実行
3-5 * * * * ~/backup.sh # 3分、4分、5分に実行
最後に、cronを登録します。
crontab cron.conf
以上でcronファイルの編集及びアクティベートは完了です。