Ansible 플레이북 작성 가이드
Ansible은 에이전트 없이 SSH로 원격 호스트를 제어하는 IaC 도구입니다. 가장 자주 작성하는 산출물은 playbook.yml로, 어떤 호스트에서(hosts) 어떤 권한으로(become) 어떤 모듈을(tasks) 실행할지를 선언합니다. 같은 플레이북을 여러 번 실행해도 같은 결과가 되는 멱등성(idempotency)이 큰 장점입니다.
핵심 모듈
ansible.builtin.apt/yum/dnf: 패키지 설치·삭제·업데이트.copy: 로컬 파일을 원격에 복사.content로 인라인 텍스트도 가능.template: Jinja2 템플릿을 렌더링해 원격에 배포.service/systemd: 서비스 상태(started/stopped/reloaded/restarted) 관리.file: 디렉터리 생성·심볼릭 링크·권한 변경.lineinfile: 설정 파일의 특정 라인 추가/수정/삭제.
Handler 동작 방식
Handler는 일반 task와 동일한 모듈을 쓰지만, notify로 호출된 경우에만 실행됩니다. 또한 플레이북의 모든 task가 끝난 뒤 마지막에 한 번만 실행되어, 설정 파일을 여러 번 수정해도 서비스는 한 번만 재시작되게 합니다. 본 빌더는 task 박스의 "변경 시 호출할 handler" 필드로 notify를 연결합니다.
실행 명령
- 인벤토리 작성:
inventory.ini에[webservers]섹션과 호스트를 나열. - 실행:
ansible-playbook -i inventory.ini playbook.yml - 건조 실행:
--check --diff옵션으로 변경 사항만 미리보기. - 특정 태그만 실행:
--tags nginx
자주 묻는 질문 (FAQ)
Q. become_user는 어떻게 지정하나요?
A. play 또는 task 레벨에서 become_user: postgres처럼 지정합니다. 본 빌더는 root 권한(become true)만 지원하므로 다른 계정이 필요하면 출력 YAML을 직접 편집하세요.
Q. 변수는 어디에 두는 것이 좋은가요?
A. 적은 양은 플레이북의 vars:에, 환경별로 다르면 group_vars/·host_vars/ 폴더로 분리합니다. 비밀번호는 ansible-vault로 암호화하세요.
Q. when 조건은 어떻게 거나요?
A. 본 빌더는 모듈·인자만 폼으로 받으므로 when은 출력 YAML을 직접 편집해 추가하세요. 예: when: ansible_facts['os_family'] == "Debian".