Ansible의 플레이북은 여러 서버나 장치들에 대한 설정, 배포, 관리 작업을 자동화하기 위한 스크립트 같은 것이다.

간단히 말해서, 플레이북은 Ansible이 어떤 작업을 해야 할지를 정의하는 것 파일이라고 보면 된다.

이 작업들은 YAML 형식으로 작성돼. 각 플레이북은 호스트 그룹이나 개별 호스트에 적용될 수 있고, 그 안에는 한 개 이상의 테스크가 포함돼 있다.

이 테스크들은 모듈을 통해 시스템에 명령을 보내고, 상태를 변경하거나 작업을 수행하게 된다. 그래서 Ansible을 사용하면 반복적이고 지루한 작업을 자동화해서 시간을 절약할 수 있다.

오늘은 앤서블 플레이북 파일을 마스터 서버에서 만들고 실행해 워커 서버에서 NginX를 설치할 것이다.

우선 /etc/ansible/hosts 파일에서 NginX를 설치할 webservers라는 그룹을 생성하고, 워커 서버의 IP를 추가해주자.

vi /etc/ansible/hosts

[webservers]
192.168.111.100

/opt 디렉토리 밑에 ansible_playbook 디렉토리를 생성하고 그 안에 플레이북 yml 파일을 만들 것이다.

[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir AnsiblePlaybooks
[root@localhost opt]# vi nginx_install.yml

플레이북은 앞서 말했지만, YAML 형식으로 작성된다.

보통 다음의 세 가지 주요 부분으로 구성된다.

  1. 호스트나 호스트 그룹 정의: 어떤 서버나 장치에 작업을 수행할지 정의
  2. 변수: 필요한 경우, 플레이북 내에서 사용할 변수를 정의
  3. 작업(Task): 어떤 작업을 실제로 수행할지를 정의. 이때 각 작업은 모듈을 사용해 시스템에 명령을 보내거나 상태를 변경한다

이렇게 구성된 플레이북은 Ansible이 해당 작업을 실행할 때 참조 된다

그럼 NginX를 설치하는 가장 기본적인 Ansible playbook 파일 내용을 작성해보자

- name: Install nginx on webservers
  hosts: webservers
  gather_facts: no
  become: yes

  tasks:
  - name: install nginx web-server
    yum:
      name: nginx
      state: present

플레이북으로 실행 할 작업의 이름을 Install nginx on webservers로 설정하고, 앞서 /etc/ansible/hosts 파일에서 정의한 webservers 라는 그룹에 등록된 호스트에 NginX를 설치한다.

gather_facts: no : 플레이북이 실행될 때 Ansible이 대상 호스트에서 사전 정보를 수집하지 않도록 하는 옵션이다.

일반적으로 Ansible은 대상 호스트의 상태와 관련된 정보를 수집하기 위해 사전 정보를 수집하는데, 이것을 “사전 사실(gather facts)”이라고 한다. 이 정보는 플레이북 실행 중에 변수로 사용될 수 있고, 예를 들어 특정 운영 체제나 하드웨어 정보를 알 수 있다.

그러므로 gather_facts: no 옵션을 추가함으로써 플레이북이 실행될 때 이러한 사전 정보를 수집하지 않으므로 실행 시간이 단축될 수 있다.

become: yes : 관리자 권한으로 작업을 실행하도록 하는 것이다. yum 명령은 관리자 권한으로 실행되는 명령이다. 그래서 이 부분을 추가하면 특정 작업이나 명령을 실행할 때 sudo나 su와 같은 명령을 사용하지 않아도 관리자 권한으로 실행될 수 있다.

그럼 이제 ansible-playbook 명령어로 생성한 플레이북 파일을 실행해보자.

[root@localhost ansible_playbook]# ansible-playbook nginx_install.yml
PLAY [Install nginx on webservers] ***
TASK [install nginx web-server]
changed: [192.168.111.100]

PLAY RECAP *
192.168.111.100 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

워커 서버에서 systemctl 명령어를 통해 NginX가 정상 설치되었는지 확인하자.

[centos@localhost ~]$ systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor pres>
Active: inactive (dead)

아니면 마스터 서버에서 애드 훅 명령어로 확인 할 수도 있다.

ansilble all -m shell -a "systemctl status nginx"

이렇게 Ansible playbook 파일을 만들고 실행해 보았다. 이렇게 하면 애드 훅 명령어를 일일이 입력할 때 보다 훨씬 빠르게 명령을 수행하여, 서버에서 수행해야 될 작업을 자동화 하고, 시간을 단축할 수 있다.

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다