◆ 今日やること
PrivateVPN内にあるmonodbのバックアップをS3に保存する
- VPCプライベートサブネットからS3にアクセスするためのエンドポイントの作成
- バックアップするための権限を絞ったIAMユーザーの作成
- mongodbのバックアップの処理のシェルの作成
◆ 実装編
> VPCプライベートサブネットからS3にアクセスするためのエンドポイントの作成
- 手順は変わっていないので、以下のリンクで説明されている通りにエンドポイントを作成します
> バックアップするための権限を絞ったIAMユーザーの作成
-
S3バケットの作成
- バックアップを格納するためのS3バケットを作成します
-
ポリシーの作成
- MongoDbbkupPolicy
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::{作成したバケット}"
}
]
}
-
検証ツール
-
IAMユーザーの作成
- ユーザーを作成したら、上記で作成したポリシーをアタッチします。
> mongodbのバックアップの処理のシェルの作成
BUCKET_NAME=hogehoge
BUCKET_PATH=dump
LIMIT=5
BACKUP_FILE=`date +"%Y%m%d-%H%M%S".dump`
BACKUP_DIR=/home/ec2-user/bkup
LOG=${BACKUP_DIR}/${BACKUP_FILE}.log
mongodump -o ${BACKUP_DIR}/${BACKUP_FILE} 2>&1 | tee -a $LOG
tar cvzf ${BACKUP_DIR}/${BACKUP_FILE}.tar.gz ${BACKUP_DIR}/${BACKUP_FILE} 2>&1 | tee -a $LOG
rm -rf ${BACKUP_DIR}/${BACKUP_FILE}
rm -rf ${BACKUP_DIR}/${BACKUP_FILE}.log
# s3へ格納
aws s3 cp ${BACKUP_DIR}/${BACKUP_FILE}.tar.gz s3://${BUCKET_NAME}/${BUCKET_PATH}/
file_count=`ls -1 | grep dump.tar.gz | wc -l`
file_name=`ls -1 | grep dump.tar.gz | head -1`
if [ $file_count -gt $LIMIT ]
then
aws s3 rm s3://${BUCKET_NAME}/${BUCKET_PATH}/${file_name}
rm -rf `ls -1 | grep dump.tar.gz | head -1 | xargs rm -rf`
fi
- crontabなどで設定
*/5 * * * * /bin/bash /home/ec2-user/bkup/bkup.sh 2>&1
そういえば、Lambdaでやればよかったかも・・・。