[CLOUD] 시스템의 특정 디렉토리를 S3로 자동 백업하기 (s3 백업 스크립트)

 

1. Amazon S3

Amazon S3(Amazon Simple Storage Service)는 업계 최고의 확장성과 데이터 가용성 및 보안과 성능을 제공하는 객체 스토리지 서비스야

즉, 어떤 규모 어떤 사업의 고객이든 이 서비스를 사용하여 웹 사이트, 모바일 애플리케이션, 백업 및 복원, 아카이브, 엔터프라이즈 애플리케이션, IoT 디바이스, 빅데이터 분석 등과 같은 다양한 사용 사례에서 원하는 만큼의 데이터를 저장하고 보호할 수 있어

2. 동기 부여

python 을 사용하여 시스템의 특정 디렉토리를 S3로 자동 백업 하는 스크립트를 만들어 볼게. 특별한 이유는 없고. aws cli 명령어로만 줄곧 사용하다가, 느닷 없이 boto3 를 사용해서 python 으로 만들어 보는 것도 좋을 것 같아.

깃 허브에 찾아보아도 이런건 잘 안보였어, 내가 하긴 싫고 누군가 해놓았으면 사용하고 싶고? 그런 의미로 해볼게 

3. 실제 현업에서 쓸수 있는 것이어야 해

쓸수 있는 것을 만드는 거야. 세상에 쓸모 없는 것은 하나도 없어. 활용하지 않아서야.

elk, rsyslog 등을 구성해서 로그를 수신하고 모으는 방식만이 백업을 의미 하는 것은 아니야.

오히려 elk, rsyslog 는  집계와 분석 하는 것에 더 가까워. 백업 보다 집계  > 분석을 하기 위한 용도가 더 맞을 거야.

백업의 의미는? 원본이 가공 되거나 변형되지 않고 그대로를 보존하는 것이 백업의 의미야.

로그의 집계란 무엇인가? (What is log aggregation?)

Log aggregation is the process of collecting, standardizing, and consolidating log data from across an IT environment in order to facilitate streamlined log analysis. Without log aggregation, developers would have to manually organize, prepare, and search through log data from numerous sources in order to extract useful information from it. In this article, we’ll discuss how log aggregation works, why it’s important, and what you should consider when choosing a log aggregation solution.

4. 어떤 로그들을 백업에 활용 할 수 있을까?

스트림으로 전송되는 형식의 로그가 아닌, 로컬에 생성 되는 파일 단위 로그를 S3 로 업로드 해보는 것을 해볼게.

일단위, 주단위로 생성 되는 여러 로그 파일일거야

 

번호 업무 역할 로그 예시 비고
1 인프라 담당자 (시스템 엔지니어, 네크워크) 시스템 로그,  네트워크 장비 로그, 인프라 로그  
2 보안 담당자 보안시스템등 보안 로그, 개인정보 처리시스템 감사 로그  
3 개발자, 서비스 담당자 웹 로그, 웹 어플리케이션 로그, 서비스 로그  

5. 구현 기능 정리

  • S3로 백업 하고자 하는 디렉토리를 리스트 파일로 할게.
  • 리스트 파일에 목록을 넣어 두는 것만으로, 백업 대상을 쉽게 추가/삭제를 할 수 있도록 말이야.
  • 백업 작업은 리스트 파일에 디렉토리 경로로만 넣어두면, 하위 포함 디렉토리를 자동 탐색 하구 백업 대상 파일을 검색 하도록 하자.
  • 백업 할 대상의 검색 조건을 지정 할 수 있어야 해. 예를 들면 어제 백업이 된 파일을 찾고, 오늘 S3에 백업을 하는 것이야.
  • S3 에 백업을 할때, 백업 하는 파일이 기존에 S3에 저장된 파일인지 여부를 확인 할 수 있어야 해.
  • 그래서 이미 업로드 된 파일은 업로드 하지 않을거야. 그리고 각 파일의 백업 성공/실패의 경우를 구분 해서 모으도록 하자.
  • 백업 대상의 각 파일은 백업의 결과를 성공/실패 범주로 구분하여 해당 목록 변수로 저장할게.
  • S3로 백업하는 파일은 대용량 파일이 있을 수 있어. 지루하지 않도록 S3로 업로드 할때 프로그레스 바를 달아서 진행률을 표시할게.
  • 모든 작업이 완료되면 작업의 결과를 슬랙 Webhook 으로도 전송하도록 할게.
  • cron 에 넣어 두기만 하면 실행 되도록 할게.
  • 모든 함수는 기능 단위 함수로 나누어 역할 별로 코드를 분리 할게. 펑션단위로 파라미터만 넘길수 있도록 할게.

6. 결과

  • 아래의 결과는 실시간 백업이 아니야. 배치 형태의 작업이야.
  • 오늘의 23:59:59 까지의 로그가 내일 새벽에 생성 되는 것을 가정하였어
  • 어제 날짜의 로그를 다음날 백업 하는 형태야.
  • 백업 결과는 슬랙 Webhook 으로 전송 하도록 하였어.
[root@buddy2:/]# python main.py
=======================================================
    python backup files uploader to s3
=======================================================

>> Run time   : 2023-06-15 17:51:12.269210
>> Category   : system_logs
>> File Count : 4 files
>> TargetFiles:

/var/log/2023-06-14/ssh_auth.tar.gz
/var/log/2023-06-14/ssh_xferlog.tar.gz
/var/log/2023-06-14/messages.tar.gz
/var/log/2023-06-14/cron.tar.gz



 putting the file into S3.....
100%|███████████████████████████████████| 326k/326k [00:12<00:00, 60.6MB/s, ssh_auth.tar.gz]
 putting the file into S3.....
100%|███████████████████████████████████| 326k/326k [00:00<00:00, 2.96MB/s, ssh_xferlog.tar.gz]
 putting the file into S3.....
100%|███████████████████████████████████| 100M/100M [00:00<00:00, 1.68kB/s, messages.tar.gz]
 putting the file into S3.....
100%|███████████████████████████████████| 64.0/64.0 [00:00<00:00, 1.63kB/s, cron.tar.gz]

>> Backup Result

1,[ok],success,/var/log/2023-06-14/ssh_auth.tar.gz | 326465 bytes
2,[ok],success,/var/log/2023-06-14/ssh_xferlog.tar.gz | 326465 bytes
3,[ok],success,/var/log/2023-06-14/messages.tar.gz | 102400 bytes
4,[ok],success,/var/log/2023-06-14/cron.tar.gz | 64 bytes

------------------------------------->
>> Send to Slack: 200

..
...
.....

7. 코드

 

GitHub - password123456/py_file_backup_to_s3

Contribute to password123456/py_file_backup_to_s3 development by creating an account on GitHub.

github.com

 



S3 에 백업했다면, 지우는 것도 해야 겠지? S3에 있는 파일을 자동으로 삭제 하는 방법은 아래에 있어 :)

 

https://uncools.tistory.com/26

 

[CLOUD] AWS S3 에서 특정 기간이 이전 파일 자동 삭제하기 (S3 파일 삭제 스크립트)

1. 오늘은 지난 시간의 '시스템에 있는 특정 파일(디렉토리)를 S3로 자동으로 백업 하는 방법' 에 이어서, S3 에 저장되어 있는 파일인데, 특정 시간이 지난 파일을 찾아서 자동으로 삭제하는 스크

uncools.tistory.com