일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- kubectl
- 명령어
- ELB
- docker
- EC2
- React Native
- docker myql
- aws cli ec2
- SecurityContextHolder
- amazon ebs종류
- amazon ebs활용
- pod
- yaml예시
- describe-instances
- sql 공유
- private repostiroy
- amazon ebs
- kubectl명령어
- jenkins parameter
- cli ec2
- 서버간 파일전송
- aws cli
- statefulset
- Configmap
- linux 파일복사
- 쿠버네티스교과서
- Ansible
- 쿠버네티스
- nexus proxy
- k8s
- Today
- Total
게으름을 위한 부지런한 게으름뱅리' 블로그
[Ansible] Synchronize 모듈을 사용하여 Remote to Remote 파일전송하기 본문
♬ Synchronize 모듈 사용하기
ansible(앤서블)의 Synchronize 모듈은 linux의 rsync 명령어를 사용할 수 있도록 만들어 놓은 모듈입니다.
( rsync명령어를 이해하고 있어야 내용을 이해하는데 쉽습니다.)
자세한 설명은 아래 Ansible 가이드 페이지에서 확인할 수 있습니다.
docs.ansible.com/ansible/2.3/synchronize_module.html
♬ Remote to Remote로 데이터 전송하기
ansible에서 파일을 옮기는 방법은 copy, fetch 등의 방법도 있지만 여기서는 synchronize(rsync)를 사용하여 두 host 간에 데이터를 전송하는 방법에 대해 아래 그림과 소스코드로 설명을 하겠습니다.
(단일 데이터 혹은 2개, 3개의 데이터를 복사할 경우에는 copy와 fetch를 주로 사용하였고 대용량의 파일 or 디렉터리를 복사할 때는 synchronize를 사용하였습니다.)
♪ Synchronize default 모드 (push)
Synchronize는 default로 push mode로 동작합니다. SourceServer 파일 or 디렉토리를 DestinationServer로 보내는 동작이 default입니다. 이걸 코드로 나타내면 아래와 같습니다.
rsycn.yml 파일
- name: Test rsync
hosts: {{ DestinationServer }}
remote_user: {{ remoteUser }}
tasks:
- name:
synchronize:
src: "/path/to/SourceServer"
dest: "/path/to/DestinationServer"
delegate_to: {{ SourceServer }}
여기서 keyword옵션은 delegate_to 옵션입니다. delegate_to 옵션은 "실행하는 localhost의 위치를 위임하겠다"라는 의미인데 delegate_to 옵션을 사용하면 옵션에 설정한 SourceServer가 localhost가 됩니다.
- src옵션은 source의 줄임말로 옮길 대상이 됩니다.
- dest옵션은 destination의 줄임말로 옮길 목적지 정도가 됩니다.
push mode는 보내는 LocalServer가 주체가 되므로 "SourceServer의 src를 DestinationServer의 dest로 보내겠다"로 해석할 수 있습니다.
-vvv 옵션을 주고 rsync.yml파일을 실행 후 "cmd"부분을 확인해보면 다음과 같이 rsync 명령이 실행되는 걸 볼 수 있습니다.
실행 : ansible-playbook -vvv rsync.yml
/usr/bin/rsync ~~~(여러가지 옵션들)~~~ {{ src }} {{remote_user@hosts}}:{{ dest }}
rsync의 명령이 실행되는 위치가 delegate_to옵션으로 설정한 SourceServer가 되므로 SourceServer(local)의 src 디렉터리의 내용을 Destination의 dest디렉터리로 복사(push)를 하겠다는 의미입니다. delegate_to 옵션이 없으면 ansible-playbook을 실행한 Control Server가 local이 되고 src는 Control Server의 파일 or 디렉터리가 되겠죠?
♪ Synchronize pull 모드
SourceServer에서 DestinationServer의 파일 or 디렉터리를 가져오는(당겨오는) 동작이 pull mode입니다.
이걸 코드로 나타내면 아래와 같습니다.
rsycn.yml 파일
- name: Test rsync
hosts: {{ DestinationServer }}
remote_user: {{ remoteUser }}
tasks:
- name:
synchronize:
src: "/path/to/DestinationServer"
dest: "/path/to/SourceServer"
mode: pull
delegate_to: {{ SourceServer }}
mode를 pull로 변경하는 "mode: pull" 옵션을 추가하고 위에서 작성한 src 옵션과 dest옵션을 바꿔줘야 합니다.
pull 모드의 동작방식이 "SourceServer가 Destination서버의 src(옮길 대상)를 dest(목적지)로 가져오겠다" 이기 때문입니다.
-vvv 옵션을 주고 rsync.yml파일을 실행 후 "cmd"부분을 확인해보면 다음과 같이 rsync 명령이 실행되는 걸 볼 수 있습니다.
실행 : ansible-playbook -vvv rsync.yml
/usr/bin/rsync ~~~(여러가지 옵션들)~~~ {{ remote_user@hosts }}:{{ src }} {{ dest }}
추가로 Synchronize에 여러가지 옵션을 사용할 수 있는데 Ansible 가이드 문서를 참고해서 작업하시면 될 것 같습니다.
이해가 잘 되지 않는다면 여러가지 테스트를 해보시고 궁금한 사항이 있으면 댓글 남겨주세요!
'IT > Ansible' 카테고리의 다른 글
[Ansible] wait_for 와 wait_for_connection 사용하기 (0) | 2021.01.14 |
---|---|
[Ansible] lineinfile 모듈을 사용하여 파일 수정하기 (0) | 2021.01.13 |
[Ansible] fetch, copy 모듈을 사용하여 파일 복사하기 (0) | 2021.01.12 |