비전공·주니어를 위한 IT 커리어 전략 커뮤니티

목차

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

이 콘텐츠가 도움이 됐나요?

누스쿨 커뮤니티에서 더 많은 커리어 전략을 나눠요