s3cmd 및 Crontab 예약 스케줄링을 사용해 ec2 Ubuntu 인스턴스에서 S3 버킷으로 자동 백업이 이루어지도록 해보자 !
crontab에 대한 이해가 필요하다면 여기를 클릭하자
<순서>
1. s3cmd 설치 및 설정
2. crontab 설정
3. 작동 확인
시작하기 전에
aws CLI 설치 및 설정, IAM 사용자 생성은 상단 글을 통해 완료했다고 가정한다.
1. s3cmd 설치 및 설정
✔︎ s3cmd란 ?
s3cmd란 Amazon S3 및 Google Cloud Storage 같은 S3 프로토콜을 사용하는 기타 클라우드 스토리지 서비스 공급자의 데이터를 업로드, 검색 및 관리하기 위한 무료 명령줄 도구이자 클라이언트이다.
명령줄 프로그램에 익숙한 사용자들에게 적합하며, 배치 스크립트 및 S3에 대한 자동화 백업, cron 트리거에 이상적이다.
우선 s3cmd를 설치해준다. 참고로 다음 순서인 crontab 예약 설정을 진행할 때 파일 권한때문에 Permission Denied 될 수 있으니, 모든 작업은 root 권한에서 실행하는 것을 추천한다.
root@ip-172-31-29-48:~$ sudo apt-get install s3cmd
s3cmd 설치가 완료되었다면 s3cmd 로 확인한다.
아마 s3cfg 파일이 설정되지 않아 ERROR가 뜰 것이다.
root@ip-172-31-29-48:~# s3cmd
ERROR: /root/.s3cfg: None
ERROR: Configuration file not available.
ERROR: Consider using --configure parameter to create one.
config 파일을 설정하기 위해 s3cmd --configure 명령을 실행한다.
IAM 사용자를 생성하고 나면 다운받을 수 있는 aws configure에 사용했던 동일한 .csv 파일의 정보를 입력해주면 된다.
목적에 따라 S3 Endpoint를 설정하거나 DNS-Style 주소를 입력해줄 수 있다. (로컬에서만 접속할 것이라 생략했다.)
그 외의 나머지 항목에 대해서도 필요에 따라 설정해주면 된다.
root@ip-172-31-29-48:~# s3cmd --configure
Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key: AKIAW3U5K7EHZP7JURYN
Secret Key: Aw+2cp2ybxI6tUuzHeNqRV5J3nFFYrTH2ZthxzRV
Default Region [US]: ap-northeast-1
Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]:
Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used
if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]:
Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password:
Path to GPG program [/usr/bin/gpg]:
When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]:
On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:
New settings:
Access Key: [부여받은 Key]
Secret Key: [부여받은 Secret Key]
Default Region: ap-northeast-1
S3 Endpoint: s3.amazonaws.com
DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.s3.amazonaws.com
Encryption password:
Path to GPG program: /usr/bin/gpg
Use HTTPS protocol: True
HTTP Proxy server name:
HTTP Proxy server port: 0
Test access with supplied credentials? [Y/n] y
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)
Now verifying that encryption works...
Not configured. Never mind.
Save settings? [y/N] y
Configuration saved to '/root/.s3cfg'
root@ip-172-31-29-48:~#
설정이 정상적으로 완료되면 Configuration saved to '/root/.s3cfg' 라는 문구가 뜬다.
2. crontab 설정
다음으로 crontab 예약을 설정한다.
crontab 예약 작업을 추가하기 위해서 명령을 실행한다.
기본 에디터는 nano이며 export VISUAL=vi; 를 앞에 붙이면 vi 에디터로 파일을 다룰 수 있다.
root@ip-172-31-29-48:~# crontab -e
root@ip-172-31-29-48:~# export VISUAL=vi; crontab -e
처음에는 어떠한 사용자 지정 작업도 설정되어 있지 않아 모든 파일이 주석처리 되어 있을 것이다.
가장 하단에 예약 작업을 작성한다.
예약한 작업은 매 5분마다 /root/ssh_backup 디렉토리의 파일을 s3의 ssh-test1 버킷으로 동기화 한다는 의미이다.
root@ip-172-31-29-48:~/ssh_backup# export VISUAL=vi; crontab -e
crontab: installing new crontab
설정이 완료되면 crontab: installing new crontab 이라는 문구가 뜬다.
이제 cron 시스템를 재시작 해줘야 한다. 재시작 후 cron 시스템의 상태를 확인해준다.
root@ip-172-31-29-48:~/ssh_backup# systemctl restart cron
root@ip-172-31-29-48:~/ssh_backup# systemctl status cron
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-03-30 00:27:13 UTC; 8s ago
Docs: man:cron(8)
Main PID: 4536 (cron)
Tasks: 1 (limit: 1145)
Memory: 376.0K
CGroup: /system.slice/cron.service
└─4536 /usr/sbin/cron -f
Mar 30 00:27:13 ip-172-31-29-48 systemd[1]: Started Regular background program processing da>
Mar 30 00:27:13 ip-172-31-29-48 cron[4536]: (CRON) INFO (pidfile fd = 3)
Mar 30 00:27:13 ip-172-31-29-48 cron[4536]: (CRON) INFO (Skipping @reboot jobs -- not system>
3. 작동 확인
이제 예약한 crontab 작업이 정상적으로 동작하는 지를 확인한다.
# 현재 경로 확인
root@ip-172-31-29-48:~/ssh_backup# pwd
/root/ssh_backup
# crontab에 동기화하기로 예약한 디렉토리 내 파일 확인
root@ip-172-31-29-48:~/ssh_backup# ls
testfile1.txt
# 현재 ssh-test1 버킷 상태 확인 (1분 주기로 확인해보았다.)
root@ip-172-31-29-48:~/ssh_backup# aws s3 ls s3://ssh-test1
PRE backup/
2022-03-29 06:33:11 0 test2.txt
root@ip-172-31-29-48:~/ssh_backup# aws s3 ls s3://ssh-test1
PRE backup/
2022-03-29 06:33:11 0 test2.txt
root@ip-172-31-29-48:~/ssh_backup# aws s3 ls s3://ssh-test1
PRE backup/
2022-03-29 06:33:11 0 test2.txt
root@ip-172-31-29-48:~/ssh_backup# aws s3 ls s3://ssh-test1
PRE backup/
2022-03-29 06:33:11 0 test2.txt
# 5분 경과 후 PRE ssh_backup/ 이라는 디렉토리 항목이 추가된 것을 확인할 수 있다.
root@ip-172-31-29-48:~/ssh_backup# aws s3 ls s3://ssh-test1
PRE backup/
PRE ssh_backup/
2022-03-29 06:33:11 0 test2.txt
# 다시 한번 확인을 위해 testfile2.txt 생성
root@ip-172-31-29-48:~/ssh_backup# touch testfile2.txt
# 아직은 testfile1.txt 까지만 동기화 되었다.
root@ip-172-31-29-48:~/ssh_backup# aws s3 ls s3://ssh-test1/ssh_backup/
2022-03-30 00:30:03 0 testfile1.txt
# 5분 경과 후 testfile2.txt 까지 동기화된 모습
root@ip-172-31-29-48:~/ssh_backup# aws s3 ls s3://ssh-test1/ssh_backup/
2022-03-30 00:30:03 0 testfile1.txt
2022-03-30 00:35:03 0 testfile2.txt
# 마지막 확인 작업
root@ip-172-31-29-48:~/ssh_backup# touch testfile3.txt
root@ip-172-31-29-48:~/ssh_backup# aws s3 ls s3://ssh-test1/ssh_backup/
2022-03-30 00:30:03 0 testfile1.txt
2022-03-30 00:35:03 0 testfile2.txt
root@ip-172-31-29-48:~/ssh_backup# aws s3 ls s3://ssh-test1/ssh_backup/
2022-03-30 00:30:03 0 testfile1.txt
2022-03-30 00:35:03 0 testfile2.txt
2022-03-30 00:50:02 0 testfile3.txt
AWS s3 콘솔에서도 정상적으로 확인할 수 있다.
'Public Cloud > AWS' 카테고리의 다른 글
[AWS] VPC 마법사로 네트워크 설정하기 (0) | 2022.03.31 |
---|---|
[AWS] VPC 네트워크 수동으로 설정하기 (0) | 2022.03.30 |
[AWS] AWS CLI를 이용한 S3 버킷 다루기 (0) | 2022.03.29 |
[AWS] AWS의 컨테이너 사용/배포 서비스 (0) | 2022.03.18 |
AWS EKS로 웹 앱을 배포해보자 ! - 2. Application 배포하기 (0) | 2022.03.16 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!