LoginSignup
2
1

More than 3 years have passed since last update.

EC2からS3への自動バックアップを10分で実装

Last updated at Posted at 2020-05-01

この記事で解説すること

この記事では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
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を編集してください

cron.conf
*/5 * * * * ~/backup.sh # 5分おきに実行
0,30 * * * * ~/backup.sh # 0分と30分に実行
3-5 * * * * ~/backup.sh # 3分、4分、5分に実行

最後に、cronを登録します。

crontab cron.conf

以上でcronファイルの編集及びアクティベートは完了です。

お疲れ様でした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1