経緯
利用しているサービスでローカル上にバックアップが作成され、サーバーダウンでバックアップファイルも消えるという本末転倒な状態だったのでローカルのバックアップファイルをS3に転送するというスクリプトを作成しました。
バックアップ仕様
- ローカルのバックアップファイルは毎日作成され「日付.zip」という命名で作成される
環境
- CentOS6系
事前準備
- S3のバケットを事前に作成しておきます。
-
参考資料を参照してIAMのユーザー作成をしてAccess Key IDとSecret Access Keyを取得してください。
参考資料ではAdministratorAccessを付与していますが、S3を利用する場合は権限設定はS3だけでいいと思います。
aws configureのDefault region nameは東京リージョンであれば「ap-northeast-1」を設定してください。
利用について
毎日クーロンで実行することを想定しています。
また、バックアップファイルが溜まっていく一方なのでS3とローカルから削除する処理も追加しております。
バックアップファイルの容量が大きく、S3の料金が高額になってしまうことを防ぐためです。
スクリプト
main.sh
# !/bin/bash
today=$(date "+%Y%m%d")
# ファイルの存在チェック(ファイルパスは適宜変更)
ls -l /file_path/${today}.zip
file_check=`echo $?`
if [ ${file_check} -eq 0 ] ; then
# ローカルファイルをS3のバケットに送る(バケット名は適宜変更)
aws s3 cp /file_path/${today}.zip s3://bucket_name/
fi
# 過去10日のバックアップファイルを削除
targetDay=`date --date "${today} 10 days ago" +%Y%m%d`
# ローカルに削除対象のファイルが存在するかチェック
ls -l /file_path/${today}.zip
local_backup_check=`echo $?`
if [ ${local_backup_check} -eq 0 ] ; then
rm -f /file_path/${targetDay}.zip
fi
# バケット内に削除対象のファイルが存在するかチェック
aws s3 ls s3://bucket_name/${targetDay}.zip
s3_backup_check=`echo $?`
if [ ${s3_backup_check} -eq 0 ] ; then
aws s3 rm s3://bucket_name/${targetDay}.zip
fi
以上です。
他にもCLIでS3を操作できるのでいろいろ試してみようかなと思っています。
追記
事前準備で「アクセスキーとシークレットアクセスキーを取得してください」と記載しましたが、
EC2でCLIを利用するのであればRoleを利用した方法もあります。
というかRoleが推奨されているようです。