# 5- Ansible Playbook작성하기

<table border="1" id="bkmrk-perplexity%EC%97%90%EC%84%9C-%EC%83%9D%EC%84%B1%ED%95%9C-ai%EC%9D%B4" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>[![image.png](http://igoni.kr/uploads/images/gallery/2025-06/scaled-1680-/wLCimage.png)](http://igoni.kr/uploads/images/gallery/2025-06/wLCimage.png)

</td></tr><tr><td class="align-right">perplexity에서 생성한 AI이미지</td></tr></tbody></table>

지난번에는 에서 inventory를 작성하고 접속이 되는지까지 확인했는데요. 이제 실제로 어떤어떤 작업을 수행하겠다~를 작성하기 위해 playbook을 작성할꺼예요.

192.168.10.10 ~ 15번까지는 nginx 최신버전을 설치하고, 192.168.100.10 ~ 15번까지는 apache를 설치할꺼예요.  
Centos7 Base yum 에는 nginx가 없기 때문에 epel 리포지터리를 구성하고, nginx를 설치하는 절차입니다.

```shell
vi /home/ansible/playbook.yml

#nginx 그룹에 등록된 서버들 작업수행
name: Nginx Install # 작업 이름
hosts: "nginx"      # 배포대상 호스트 정보
gather_facts: yes   # 배포대상 서버들의 정보 수집
become: yes         # root로 작업시
tasks:              # 아래 나열된 작업을 수행
- name: epel enable # epel repository 활성화
  yum:
    name: https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    state: present
 - name: nginx install #nginx rpm 설치
  yum:
     name: nginx
     state: latest
 - name: nginx start  #nginx 서비스 실행, 재부팅후에도 활성화 적용
  systemd:
    name: nginx
    daemon_reload: yes
    state: started
    enabled: yes

```

<div class="box" id="bkmrk-%23apache-%EA%B7%B8%EB%A3%B9%EC%97%90-%EB%93%B1%EB%A1%9D%EB%90%9C-%EC%84%9C%EB%B2%84%EB%93%A4-"><div class="code"><div class="linenoswrapper"><div>  
</div><div>  
</div><div>\#apache 그룹에 등록된 서버들 작업수행  
</div></div></div></div><div class="box" id="bkmrk-"><div class="box"><div class="code"><div class="linenoswrapper"><div class="linenos">  
</div><div>  
</div></div></div></div></div>```shell
name: apache Install # 작업 이름
hosts: "apache"      # 배포대상 호스트 정보
gather_facts: yes   # 배포대상 서버들의 정보 수집
become: yes         # root로 작업시
tasks:              # 아래 나열된 작업을 수행
- name: apache install #httpd rpm 설치
  yum:
     name: httpd
     state: latest
 - name: httpd start  #httpd 서비스 실행, 재부팅후에도 활성화 적용
  systemd:
    name: httpd
    daemon_reload: yes
    state: started
    enabled: yes
```

코드를 작성 다 했으면 배포를 진행해보아요

```shell
$ ansible-playbook -i /home/ansible/inventory /home/ansible/playbook.yml -b

```

<div class="box" id="bkmrk-%23-%2Fhome%2Fansible%2Finve"><div class="code"><div class="linenoswrapper"><div>\# /home/ansible/inventory에 구성된 인벤토리를 가지고 /home/ansible/playbook.yml 파일에 구성된 작업절차를 수행하겠다는 Command 입니다.  
</div></div></div></div>배포코드 작성시 유의사항

- playbook은 yml 포맷으로 작성하기 때문에 tree구조를 띄어쓰기로 인식합니다 (탭키 인식 안함)  
    상 / 하위 개념 적용을 위해 띄어쓰기 잘 해주세요.
- 작성된 예시코드는 ansible 2.9버전의 코드입니다. 2.10버전 이후부터는 문법이 바뀌었습니다. (https://docs.ansible.com/ansible/latest/ 참고)