안녕하세요 ManVSCloud 김수현입니다.
현재 네이버 클라우드에서는 AWS의 수명 주기 관리자와 같은 기능은 없는 상태입니다.
오늘은 네이버 클라우드에서 이미지 백업을 자동화 할 수 있도록 자료를 공유 해보려합니다.
원래 cloud function을 이용하여 만들어볼까 생각했는데 아직 python, javascript같은 언어에는 익숙하지 않아 shell script를 작성하여 ncloud cli로 이미지 백업을 진행할 수 있도록 하였습니다.
참고로 제가 만든 스크립트는 VPC에서만 사용가능합니다.
(클래식에서 사용하시려면 스크립트 내에 명령어 옵션만 조금 변경해주면 됩니다.)
Download link
아래는 ncloud cli와 제가 만든 스크립트를 다운로드 할 수 있는 링크입니다.
// "ncloud cli" 다운로드 링크 https://www.ncloud.com/api/support/download/5/65 // manvscloud의 "네이버 클라우드 이미지 백업 스크립트(VPC용)" 다운로드 링크 http://file.manvscloud.com/nCloudimgScript.zip
README
해당 스크립트를 잘 사용하고 싶다면 README를 한 번 읽어보면 좋습니다.
적어도 Basic explanation는 읽어야 잘 사용할 수 있습니다.
설치 후에도 디렉토리 내에 존재하는 README 파일입니다.
아무래도 한번에 집중해서 만들기보다 쉬는 시간을 내어 조금씩 만들다보니 내가 왜 이렇게 만들었지? 싶은 부분도 존재하긴 합니다.
그런 부분은 버전 업데이트를 통해 업그레이드 해볼까합니다.
======================================== Updated : 2022-01-19 Maker : 김수현(ManVSCloud) Blog : https://manvscloud.com/ ======================================== ############################# Basic explanation ############################# 1. 00.Config를 가장 먼저 설정해주셔야합니다. 2. 02.selectiveBackup를 사용하기 위해서는 01.getBackupListConfig를 먼저 설정해주어야합니다. 3. 03.allServerBackup은 전체 백업이므로 01.getBackupListConfig 따로 설정해주지 않아도 됩니다. ## 선택 백업 # 00.Config+01.getBackupListConfig+02.selectiveBackup ## 전체 백업 # 00.Config+03.allServerBackup ############################# Version ############################# // 각 스크립트 생성(2022-01-19) 00.Config v0.1 01.getBackupListConfig v0.1 02.selectiveBackup v0.1 03.allServerBackup v0.1 ############################# Function ############################# 00.Config : 이미지 이름 및 백업 보관일을 설정하는 초기 세팅 파일입니다. 01.getBackupListConfig : 백업할 서버를 선택할 수 있습니다. 02.selectiveBackup : 01.getBackupListConfig에서 선택된 서버를 대상으로 이미지 백업을 진행합니다. 03.allServerBackup : 사용하고 있는 모든 서버에 대해 이미지 백업을 진행합니다. ############################# include ############################# Location : ImageBackup/include * List -. allInstanceNo : 사용하는 Server의 인스턴스 No를 불러옵니다. -. backupCheck : 미구현 -. deleteImage : 백업 보관일보다 오래된 이미지를 삭제합니다. -. getInstanceNo : 01.getBackupListConfig 에서 선택된 서버에 대한 인스턴스 No를 불러옵니다. -. imageList : 전체 이미지 리스트를 불러옵니다. ############################# Log ############################# AllBackup.log : 03.allServerBackup 실행 시 생성되는 표준 입/출력,에러 로그 CreateBackup.log : 02.selectiveBackup 실행 시 생성되는 표준 입/출력,에러 로그 DeleteBackup.log : 02,03 Backup 실행 시 include/deleteImage 에서 이미지 삭제 시 생성되는 표준 입/출력,에러 로그 ======================================== ========== Made in ManVSCloud ========== ========================================
아! 그리고 해당 스크립트를 사용하여 발생하는 문제에 대해서 책임지지 않습니다.
충분히 사용이 가능한 환경인지 검토 후 사용하시기 바랍니다.
A to Z
- 백업 서버를 생성하여 이미지 백업을 관리하는 방법으로 설명 드리도록 하겠습니다.
- Access Key를 사용하는 것은 지양하고 있으므로 A to Z 설명은 Sub Account의 Role을 서버에 적용시키는 방법으로 진행하겠습니다.
* Create Server & Sub Account

(물론 기존에 사용하고 있는 서버에도 적용할 수 있습니다.)

[A 서버]
[B 역할] (VPC Server 서비스에 대한 모든 권한)
(A서버에게 B역할을 부여하면 A서버는 B역할”VPC Server 서비스를 컨트롤 할 수 있는 권한”을 얻게 된다.)


서버와 이미지 리스트만 보는 것이 아니라 이미지 생성 및 삭제도 필요하므로 “NCP_VPC_SERVER_MANAGER” 정책을 추가했습니다.

(해당 등록한 서버에 이 역할을 주는 것)
* Install
위 생성한 서버(백업용 서버)로 접속하여 아래와 같이 설치 과정을 진행합니다.
[root@img-backup-kr1 ~]# cd ~ [root@img-backup-kr1 ~]# wget -O ncloud_cli.zip https://www.ncloud.com/api/support/download/5/65 [root@img-backup-kr1 ~]# unzip ncloud_cli.zip [root@img-backup-kr1 ~]# wget http://file.manvscloud.com/nCloudimgScript.zip [root@img-backup-kr1 ~]# unzip nCloudimgScript.zip [root@img-backup-kr1 ~]# chmod 755 -R cli_linux [root@img-backup-kr1 ~]# cp -avp ~/cli_linux/ncloud ~/cli_linux/ncloud_org [root@img-backup-kr1 ~]# vi ~/cli_linux/ncloud
vi ~/cli_linux/ncloud 를 통해 경로를 다음과 같이 편집해줍니다.
[기존 파일 내용]
#!/bin/bash ./jre8/bin/java -jar ./lib/ncloud-api-cli-1.1.5-SNAPSHOT-jar-with-dependencies.jar "$@"
[변경 후 파일 내용]
#!/bin/bash ~/cli_linux/jre8/bin/java -jar ~/cli_linux/lib/ncloud-api-cli-1.1.5-SNAPSHOT-jar-with-dependencies.jar "$@"
* Config & Backup
해당 백업을 사용을 하기 위해서는 00.Config 파일을 편집하여 기본 설정을 해주어야합니다.
[root@img-backup-kr1 ~]# vi ~/ImageBackup/00.Config
. . . ## 이미지 이름 설정 # * 이미지 생성 시 최대 30 자 제한으로 imgName에는 10자 이하로 설정해주세요. # * 알파벳 문자로 시작해야합니다. # * 특수문자 "-" 순서에 따라 백업 보관일을 감지하므로 영문+숫자로만 사용해주세요. # * 최종 이미지 생성 시 "imgName-instanceNo-생성일자"의 이름으로 생성됩니다. imgName="이미지명" ## 백업 보관일 설정 # * 일단위 설정입니다. ex) "14" (14일) saveDay="14" . . .
위에서 설정한 이미지 이름과 백업 보관일을 아래와 같이 실행해줍니다.
[root@img-backup-kr1 ~]# ~/ImageBackup/00.Config
전체 백업을 원하실 경우 ~/ImageBackup/03.allServerBackup 을 바로 실행할 수 있겠지만
원하는 서버만 선택하여 백업할 수 있도록 선택 백업을 진행하도록 하겠습니다.
아래와 같이 01.getBackupListConfig를 실행하면 백업을 원하는 서버를 선택할 수 있습니다.
선택한 서버 번호 앞에 +로 표시가 되고 선택이 끝난 후 ENTER 키를 눌러주면 선택된 서버 목록이 출력되므로 다시 한 번 확인할 수 있습니다.
[root@img-backup-kr1 ~]# ~/ImageBackup/01.getBackupListConfig 백업이 필요한 서버를 선택해주세요: 1 ) img-backup-kr1 2 ) imagetest 3 ) manvscloud-web-pub-kr2 추가할 서버를 선택해주세요. (저장 후 종료를 원하시면 ENTER 키를 눌러주세요.): 2 백업이 필요한 서버를 선택해주세요: 1 ) img-backup-kr1 2+) imagetest 3 ) manvscloud-web-pub-kr2 imagetest 서버가 추가되었습니다. 추가할 서버를 선택해주세요. (저장 후 종료를 원하시면 ENTER 키를 눌러주세요.): 3 백업이 필요한 서버를 선택해주세요: 1 ) img-backup-kr1 2+) imagetest 3+) manvscloud-web-pub-kr2 manvscloud-web-pub-kr2 서버가 추가되었습니다. 추가할 서버를 선택해주세요. (저장 후 종료를 원하시면 ENTER 키를 눌러주세요.): 선택된 서버 목록 : imagetest manvscloud-web-pub-kr2
위에서 백업할 서버 선택이 끝났다면 아래와 같이 스크립트를 실행할 수 있습니다.
[root@img-backup-kr1 ~]# ~/ImageBackup/02.selectiveBackup
Cron
위에서 기본 설정(~/ImageBackup/00.Config, ~/ImageBackup/01.getBackupListConfig)이 마쳐졌을 경우 cron을 통해 원하는 시간대에 자동으로 백업이 진행되도록 설정할 수 있습니다.
[root@img-backup-kr1 ~]# vi /etc/crontab
crontab 파일에 아래 서버 선택 백업이나 서버 전체 백업 중 원하는 것을 선택하여 넣어줍니다.
참고로 아래에 설정된 값은 매일 새벽 2시에 해당 스크립트가 실행되도록 설정된 것입니다.
꼭 아래와 같은 시간에 스크립트가 실행되도록 할 필요는 없습니다.
매주 일요일 새벽 3시에 실행되길 원한다면 0 3 * * 7
매월 1일 새벽 1시라면 0 1 1 * *
등 시간은 자유롭게 변경하여 사용하시면 됩니다.
## 서버 선택 백업 0 2 * * * root ~/ImageBackup/02.selectiveBackup
## 서버 전체 백업 0 2 * * * root ~/ImageBackup/03.allServerBackup
마지막으로 crond 서비스를 재시작 해주면 쉘 스크립트를 이용하여 네이버 클라우드에서 이미지 백업을 자동화하기 끝!
[root@img-backup-kr1 ~]# systemctl restart crond.service
Personal Comments
다음엔 쉘 스크립트가 아니라 이런 것들은 Python이나 javascript를 조금 배워서
Cloud Fuction을 통해 실행되도록 하고 싶네요.
일단 저는 테스트 후 사용했을 때 크게 작동이 되지 않는 부분이나 버그는 발견되지 않았습니다. (버그 발견으로 한 3~4번은 뜯어 고친듯…)
혹시라도 사용 중 버그가 발견된다면 댓글로 공유 부탁드립니다.
긴 글 읽어주셔서 감사합니다.

2 Comments
잘읽었습니다~
초반부 `익숙하지 않아 sheel script를 작성하여`에 sheel이 오타난것 같네요
오타 알려주셔서 감사합니다~