맘가는 대로
앤서블의 구조와 작동 방식 본문
앞서
앤서블을 사용하기 전, 앤서블이 어떠한 구성이며 어떠한 방식으로 작동하는지 알아볼 것이다. 대략적으로 알아본 뒤에 세세한 것은 이후의 글들에서 차근차근 알아볼 것이다.
구조
앤서블은 플레이북, 모듈, 모듈 유틸리티, 플러그인, 인벤토리로 구성되어 있다. 각 구성 요소가 무엇인지 알아보자.
- 모듈
앤서블에서 사용하는 스크립트이며, SSH 를 통해 원격 서버에 전달된 뒤 작업을 실행하는 역할을 한다.
일반적인 모듈의 의미와 크게 다르지 않으며, 명령줄 혹은 플레이북에서 사용되어 적절하게 지정되면 지정된 방식으로 작업을 진행한다.
앤서블에서 자주 접하게 될 구성 요소이며, 이미 많은 모듈들이 구현되어 있어 필요하다고 느껴지는 기능이 있다면 우선 모듈 목록을 보는 것을 권할 수준으로 다양한 모듈들이 기본적으로 제작되고 핵심 요소로 탑재되어 있다.
- 모듈 유틸리티
모듈 유틸리티는 모듈에서 자주 사용되는 절차들을 따로 분리하여 구현한 것이다.
따라서 앤서블 개발자들은 자주 접할 수 있을지 모르나 나와 같은 엔드 사용자들은 접할 기회가 많지 않을 것이다.
- 인벤토리
앤서블을 통해 조작할 장비들을 정의해놓은 파일이다.
규칙은 있지만 구성은 자유롭기 때문에 편의성과 관리 용이성을 잘 생각하며 구분하여 작성하는 것이 좋다.
특히, 역할별로 나눌 경우 앤서블에서 공유하며 쓰는 '롤(Role)' 이라는 역할 정의 파일 구조를 통해 쉽게 관리를 할 수 있을 것이다. 이는 추후 다시 살펴보기로 한다.
- 플러그인
앤서블의 핵심이 되는 구성요소이며, 반드시 파이썬으로 작성되어야 하는 요소이다.
다른 구성 요소들이 원격 서버와 관련된 요소들인 반면, 플러그인은 앤서블 프로세스와 관련된 핵심 요소이다.
예를 들어, 인벤토리에 대해서는 인벤토리를 해석하고 활용할 수 있게 하는 인벤토리 플러그인이 앤서블 내에 있다.
- 플레이북
앤서블이 실행하게 될 작업들을 정의해놓은, 일종의 앤서블 전용 스크립트라고 할 수 있다.
YAML 형식으로 작성하게 되며, 보통의 프로그래밍에서 사용되는 반복문, 조건문, 변수 등을 통해서 동적이면서도 다양한 상황에 적합한 작업 절차를 생성할 수 있다.
- 템플릿
필수 구성요소는 아니지만, 많은 자동화 프로그램이 설정 자동화를 제공하듯 앤서블에서도 템플릿을 통해 단일 형식으로 다양한 환경의 서버에 적합한 설정 파일을 생성할 수 있도록 하는 기능이다.
jinja2 라이브러리를 사용하며, 많은 웹 프로그래밍에 사용되며, 쉬운 사용법으로 어렵지 않게 사용할 수 있게 해준다.
동작 구조
앤서블의 주된 구성 요소를 확인해 보았으니 앤서블이 어떻게 작동하는지 알아보도록 하자.
대략적인 앤서블의 동작 순서는 아래의 이미지로 간단하게 표현하였다.
사용자가 CLI 를 통해 명령어를 앤서블로 전달하거나 플레이북을 통해 앤서블이 처리하도록 하면 앤서블이 다시 서버들에 작업을 진행한다.
앤서블이 서버에 작업을 진행하는 과정은 다시 아래에 이미지로 표현하였다.
처음 앤서블은 원격 서버에 SSH 를 이용하여 인증하고 접속한다. 이후 모듈을 전달하는데, 모듈을 전달할 때에도 SFTP 를 이용하게 되므로 별도의 파일 전달 방법을 구현하지는 않는다.
전달된 모듈은 대개 파이썬 파일이며, 파이썬 파일은 서버에 내장된 파이썬을 이용해 실행이 되며 실행된 파이썬 파일은 목적에 맞게 서버 환경을 변화시킨다. 그리고 작업의 결과값을 구한 뒤 다시 앤서블에 결과값을 전달한다.
앤서블은 해당 결과값으로 작업이 정상적으로 수행되었는지 확인을 할 수 있다.
마치며
간단하게 앤서블의 구성요소와 작동 방식을 훑어 봤다. 이후 실습을 통해 실제 서버 환경을 변경하며, 필요하다면 자세하게 앤서블의 작동 방식을 보다 상세하게 보도록 하겠다.
출처
'자동화 > 앤서블' 카테고리의 다른 글
Ansible 을 통해 파일 작성하기 (0) | 2019.11.03 |
---|---|
Ansible 로 LAMP 구성하기 (0) | 2019.09.29 |
앤서블 인벤토리 설정 (0) | 2019.06.09 |
앤서블 실습 환경 구성 (0) | 2019.06.08 |
앤서블(Ansible)에 대해 (0) | 2019.06.02 |