AWS, GCP, Azure.. 등등 많은 클라우드 스토리지가 세상에 나와있다.
다양한 Storage를 이용할 수 있는 시대에 살면서 당연하게 따라오는 걱정은
어떻게 이렇게 다양한 Storage 사이에서 Data를 옮겨야 하지??
일 것이다.
Rclone은 이런 Storage간 Data 전송에 대한 걱정을 덜어준다.
RClone은 40개 이상의 Cloud Storage를 지원하는 Open-source Command Line Tool 이며 AWS, GCP 등 다양한 Vendor의 Storage Service 뿐만 아니라 Local에서의 Data Transfer도 지원하는 만능 Migration Tool이다.
본 글에서는 rclone을 어떻게 이용할 수 있는지, 얼마나 편리하게 사용하는지 알아보자.
Rclone으로 Data Migration 준비하기
Data를 Migration할 때 가장 중요한 것은 "출발지"와 "목적지"를 정하는 것이다.
Rclone에서는 "config"라는 개념을 이용해서 출발지와 목적지를 간편하게 지정할 수 있도록 했다.
바로 "rclone config" 커맨드를 이용해 Source과 Destination을 설정해보자.
rclone은 command-line program이므로 윈도우 환경이라면 cmd나 powershell을 이용하도록 하자.
위 화면에서 새 remote를 만드는 입력인 "n"을 입력하자.
수많은 Cloud Storage의 List들 중에 원하는 번호를 입력하자.
이후의 설정은 어떤 Storage를 사용하는지에 따라 달라지는데, 경험상 Account부터 시작해서 Google Drive의 Team drive 사용 설정 등 다양한 Configuration을 지원해 원하는 대로 사용할 수 있었다.
본 글에서는 GCS에서 Google Drive로 data migration을 시연할 것이기 때문에
Google drive를 지정하는 "13"을 입력하고 Config을 진행하자.
Google drive를 지정해주면 다음과 같이 ClientID와 Client_secret을 입력할 수 있다.
해당 칸을 입력하지 않고 default값으로 넘어갈 수도 있지만, 이럴 경우 rclone의 자체 ClientID를 사용하기 때문에 Performance가 떨어지는 경우도 존재한다.
본인은 개인적으로 체감을 하지는 못했지만 Data migration 작업이 있을때마다 ClientID를 넣었다.
GCP에서 Oauth credential key를 생성하는 것으로 ClientID를 만들 수 있다 .
이 외에도 설정을 진행하다보면 Oauth 인증, Service account 여부, Team drive 설정 여부 등 다양한 설정을 할 수 있지만 본 글에서는 넘어가도록 한다. 자세한 내용은 rclone 공식 홈페이지를 참고하자.
"testGdrive" 라는 이름으로 Google Drive의 Config 을 완료했다.
추가로 Migration 작업의 source가 될 Google Cloud storage의 config도 완료해 놓았다.
Type에 drive가 의미하는 것이 Google Drive , google cloud storage가 의미하는 것이 GCP의 GCS이다.
다른 수 많은 Cloud storage들의 Config들도 이와 같은 방식으로 생성하고 관리할 수 있다.
이 "Config" 개념을 사용함으로써 매번 Migration때마다 Source와 Destination의 설정, Credential 등을 설정해야 하는 번거로움을 덜 수 있다.
rclone config을 생성했으니 이제 본격적으로 Data migration을 시작해보자.
Rclone으로 Data Migration 시작하기
Google Cloud Storage 에서 Google Drive로 data migration을 수행하는 작업을 가정해보자.
보통의 경우라면 GCS에서 Gdrive로 바로 migration을 수행하는 방법이 없기 때문에 GCS 에서 중간 경유지로 파일을 옮기고 다시 Gdrive로 옮겨야 하는 번거로운 작업을 해야 했지만,
rclone으로 GCS -> Gdrive 간 Data migration을 한 번의 작업으로 단축시킬 수 있다.
다른 Cloud Storage 간의 Migration도 이와 동일한 방법으로 수행 가능하다.
GCS -> Gdrive 간 data migration의 대략적인 architecture는 다음과 같다.
위의 그림에서 GCS와 Gdrive 사이에 있는 vm instance가 rclone을 실행해 file을 Transfer한다.
GCP Operations의 Monitoring 기능으로 GCP 내,외부를 오가는 Network Traffic을 감지해 정상적으로 Transfer가 되는지 감시할 수 있다.
본인은 항상 Network traffic을 condition으로 Alert를 걸어 놓아 Transfer 상태가 비정상적일시 노티가 오도록 설정한다.
이제 VM instance로 접속해 어떻게 rclone을 실행해야 하는지 알아보자.
본 포스트에 사용된 VM instance의 SPEC은 1 vcpu, 4GB mem, devian 10 OS 의 GCP vm instance이다.
VM instance에서 config을 생성할 시 주의해야 할 점은, auto config 여부를 묻는 질문에 n를 입력해야 정상적인 Oauth 인증 페이지로 진입할 수 있다는 것이다.
VM instance 위에서도 위와 같이 Gdrive와 GCS의 config을 생성했다면 이제 본격적으로 data transfer를 진행할 수 있다.
Copy vs Sync
rclone에서 source를 유지하면서 data를 transfer할 수 있는 커맨드는 copy와 sync 2가지가 존재한다.
문자 그대로 copy는 source에서 destination으로의 단순한 File 복사를 통한 Transfer를,
sync는 source의 file 상태를 destination과 동일하게 함으로써 Transfer를 수행한다.
두 커맨드는 file의 수정여부를 수정시간, md5hash, 크기 등으로 판단해 이미 존재하는 file일 경우 건너뛰고, source와 다를 경우 다시 전송해 동기화를 수행한다.
두 방법 모두 Source에서 Destination으로의 File Transfer를 수행하는 커맨드이지만,
몇 가지 차이점이 존재한다.
우선 copy 커맨드는 단순히 FIle의 복사만을 수행하기 때문에, destination의 file을 삭제하지 않는다.
sync 커맨드는 source와 destination의 동기화가 목적이기 때문에 source에는 없지만 destination에는 존재하는 file들을 삭제해버리기 때문에 주의가 필요하다.
경우에 따라 필요한 커맨드를 선택하면 된다.
Data Transfer 시작
config과 copy/sync의 차이를 알았으니 이제 본격적으로 data를 transfer 해보자.
본 글에서는 sync로 Migration을 진행하는 경우를 시연하지만, copy 커맨드도 sync와 대부분 동일하다.
sync 커맨드의 가장 기본적인 커맨드 구조는 다음과 같다.
rclone sync source:path dest:path [flags]
source와 dest를 위의 config에서 설정한 name으로 바꿔넣으면 된다.
본 글의 경우에는 GCS 에서 Gdrive로 Migration을 진행하기 때문에 다음과 같이 입력하자.
rclone sync GCS: testGdrive:
rclone을 이용한 data transfer시 유의해야 할 점은, GCP의 gsutil을 사용할 때처럼 destination의 path를 지정하지 않아도 알아서 directory를 만들어주지 않는다는 것이다.
때문에 만약 destination의 path 경로를 지정해주지 않는다면 해당 storage의 content들만 transfer하게 될 것이다.
Migration이 끝난 뒤 file들이 흩뿌려져 있는 것을 원치 않는다면 꼭 destination의 Path를 지정해주자.
이제 VM instance에서 위의 커맨드를 실행해보자.
정상적으로 실행되었다면 아무 출력도 없이 프로세스가 실행되고 있을 것이다.
이 상태에서 data는 정상적으로 transfer하고 있을 것이지만 아무래도 어떤 파일이 가고 있는지, 얼마나 남았는지 알고 싶을 것이다.
이 때 rclone에서 제공하는 flag 중 하나인 "progress" flag를 이용해 tranfer의 상황을 출력하게 할 수 있다.
progress flag는 "-P" 를 붙여 활성화 가능하다.
rclone은 이처럼 flag를 제공해 data transfer에 필요한 수 많은 편의기능, 설정들을 제공한다.
flag는 모든 커맨드에 사용할 수 있는 global command가 있고, storage마다 고유하게 사용할 수 있는 설정도 존재한다.
이 글에서 flag 전부를 설명할 수는 없으니 공식 documentation에서 자세한 설명을 보자.
덧붙여 본인이 GCS에서 Gdrive로 migration을 진행할 때에는 다음과 같은 커맨드를 애용한다.
rclone sync -P --transfers=5 --drive-chunk-size=128M --fast-list --drive-stop-on-upload-limit source:path dest:path
맺으며
지금까지 cloud storage migration tool인 Rclone을 이용해서 data migration 하는 방법을 알아보았다.
본 글에서 소개한 내용과 기능은 모든 rclone 기능의 일부분밖에 되지 않는다.
정말 rclone을 100% 이용하고 싶다면 공식 홈페이지를 참고해보자.
점점 Cloud storage에 뛰어드는 vendor가 많아지며 data transfer의 방법도 다양해지면서 storage간 migration이 점점 더 복잡해지는 현 상황에서 흡사 swiss army knife와 같은 다기능 tool 의 등장은 반가울 수 밖에 없다.
이 글을 읽는 분들도 migration tool Rclone을 이용해 Migration 작업을 편리하게 진행했으면 한다.
'Network' 카테고리의 다른 글
Minikube로 로컬 환경에서 쿠버네티스 클러스터 구성하기(MacOS, Windows 환경) (3) | 2022.04.30 |
---|---|
Public Cloud 환경에서 Istio 서비스 메쉬 사용하기 (0) | 2021.09.23 |
X11 Forwarding을 통해 AWS EC2에서 GUI 사용해보기 (0) | 2020.03.13 |
용어를 확실히- Sharding 이란? (0) | 2019.12.24 |
용어를 확실히- RTO,RPO (0) | 2019.12.24 |