Backup EC2 instance trên AWS thì có rất nhiều cách, ví dụ: AWS Backup, Lambda, ... Những cách này đều có hướng dẫn chi tiết trong document của AWS, tuy nhiên sau bài Backup tự động Server, VPS Linux và lưu lên Google drive có nhiều bạn hỏi tôi có thể áp dụng cách này cho AWS EC2 được không ? Câu trả lời là : Hoàn toàn được. Ưu điểm của phương pháp này so với những phương pháp được giới thiệu của AWS là không cần thiết phải Backup toàn bộ Instance ( thường có dung lượng lớn, gây tốn chi phí) mà chúng ta chỉ backup những phần cần thiết như: MySQL data, Upload file.
Ở bài trước tôi sử dụng RClone để tự động lưu data lên Google Drive, hôm nay tôi muốn giới thiệu tới các bạn phương pháp sử dụng AWS CLI để lưu dữ liệu lên S3.
Trong hướng dẫn này, chúng ta sẽ backup database và upload data và lưu vào Amazon S3.
Chúng ta sẽ lưu trữ các bản backup vào S3 Glacier sau 30 ngày sử dụng 3 Lifecycle policy và sau đó lên lịch xóa vĩnh viễn sau 90 ngày kể từ ngày hết hạn.
Todo:
- Tạo 1 IAM User và S3 Permission.
- Install AWS CLI.
- AWS S3 List Verification.
- Install S3fs và Mount S3 Bucket.
- Tạo Backup Script.
- Lưu data lên S3 Bucket.
- Tự động xoá file hết hạn trên S3 Bucket
Step 1: Tạo IAM User và S3 Permission
Đăng nhập vào AWS Management Console => IAM service.
Tạo 1 IAM user mới và attach permission sử dụng AmazonS3FullAccess policy hoặc sử dụng custom policy nếu bạn chỉ muốn set một quyền truy cập cụ thể nào đó trên S3 bucket.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::MyS3Bucket"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": ["arn:aws:s3:::MyS3Bucket/*"]
}
]
}
Step 2. Install AWS CLI và Config
SSH remote và EC2 Instance (Trong trường hợp của tôi sử dụng Centos) và sau đó chạy lệnh update để cài đặt các bản cập nhật:
sudo yum update
Install AWS CLI:
sudo yum install awscli -y
Chạy command sau:
aws configure
AWS CLI sẽ yêu cầu bạn nhập AWS Access ID và Secret Key của bạn. Sau đó bạn cần cung cấp Region của EC2 instance, và để default cho [Default output format], Ví dụ:
AWS Access Key ID [None]: xxxxxxxxxxxxxx AWS Secret Access Key [None]: yyyyyyyyyyyyyyy Default region name [None]: us-west-2 Default output format [None]:
Step 3. Verify AWS S3
- Đăng nhập vào AWS Management Console => S3 service.
- Tạo mới một S3 Bucket, ví dụ: mbc-backup-bucket
Xác minh danh sách S3 bucket sau khi hoàn tất cài đặt AWS CLI, chạy command:
aws s3 ls
2022-08-06 08:02:56 testbucket1 2022-09-13 14:21:09 testbucket2
Nếu danh sách S3 bucket không được in ra => Check IAM User và chắc chắn rằng IAM policy ở step 1 được gắn vào IAM User của bạn.
Step 4. Install S3fs và Mount S3 Bucket
Bạn có thể đưa bản backup của bạn tới Amazon S3 mà không tốn thời gian config. Điều này có thể thực hiện được bằng cách cài đặt S3fs trên EC2 instance của bạn và mount S3 bucket vào 1 thư mục cụ thể.
sudo yum install s3fs-fuse
echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ~/.passwd-s3fs chmod -v 600 ~/.passwd-s3fs
mkdir /home/ec2-user/s3_uploads
s3fs S3_BUCKET_NAME /home/ec2-user/s3_uploads -o passwd_file=~/.passwd-s3fs
Tiếp theo, kiểm tra kết quả Mount bằng cách:
df -h
Kết quả sẽ tương tự như vậy:
Giờ đây tất cả những gì bạn upload trong thư mục /home/ec2-user/s3_uploads đều được đồng bộ lên S3 Bucket
Step 5. Tạo Backup Script.
Tạo backup script backup.sh
vi /home/backup.sh
# Backup Server and Upload to S3
# Config constant.
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/home/ec2-user/s3_uploads/$TIMESTAMP"
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
MYSQL_USER="root"
MYSQL_PASSWORD="[Input your mysql password here]"
SECONDS=0
# Begin run backup.
mkdir -p "$BACKUP_DIR/mysql"
echo "Starting Backup Database";
databases=`$MYSQL -u $MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`
for db in $databases; do
$MYSQLDUMP -u $MYSQL_USER -p$MYSQL_PASSWORD --force --opt $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done
echo "Finished";
echo '';
echo "Starting Backup Nginx Configuration";
cp -r /etc/nginx/ $BACKUP_DIR/nginx/
echo "Finished";
echo '';
size=$(du -sh $BACKUP_DIR | awk '{ print $1}')
duration=$SECONDS
echo "Done backup with: Total $size, In $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."
sudo chmod +x /home/backup.sh
Để có thể thực hiện tự động việc Backup hằng ngày, bạn cần đưa backup.sh vào cron jobs. Nếu bạn chưa cài đặt Cron Job, vui lòng cài đặt dòng lệnh sau:
sudo yum install cronie
Sau đó start service và cài đặt cho cronjob tự động start khi khởi động VPS:
sudo service crond start
sudo chkconfig crond on
Chạy lệnh sau để tạo mới 1 cronjob chạy backup tự động hằng ngày vào 1 giờ sáng:
crontab -e
Bạn nhập đoạn cronjob sau và lưu lại:
* 1 * * * sh /root/backup.sh
Step 6. Tự động xoá file hết hạn trên S3 Bucket
- Đăng nhập vào AWS Management Console => S3 service => Chọn S3 bucket đã tạo để backup.
- Tạo 1 S3 Lifecycle policy để tự động xoá hoặc di chuyển Backup của bạn sang Glacier storage sau một thời gian nhất định.
0 Nhận xét:
Đăng nhận xét
Rất mong các ý kiến của các bạn khi đọc bài viết này !