개요
Ansible은 Red Hat이 관리하는 오픈소스 IT 자동화 및 구성 관리(Configuration Management) 도구입니다. 에이전트 없이 SSH만으로 원격 서버를 관리하며, YAML 기반 Playbook으로 인프라 설정을 코드화합니다. 학습 곡선이 낮고 즉시 사용할 수 있어 가장 널리 쓰이는 구성 관리 도구입니다.
- 개발: Red Hat (Michael DeHaan, 2012년 설립 → 2015년 Red Hat 인수)
- 라이선스: GPL v3
- 언어: Python
- 웹사이트: https://ansible.com
- Galaxy: https://galaxy.ansible.com (커뮤니티 Role/Collection 저장소)
핵심 특징
| 특징 | 설명 |
|---|---|
| 에이전트리스 (Agentless) | 대상 서버에 에이전트 설치 불필요, SSH로 직접 접속 |
| YAML Playbook | 사람이 읽기 쉬운 YAML로 자동화 작업 정의 |
| 멱등성 (Idempotent) | 같은 Playbook을 여러 번 실행해도 결과 동일 |
| Push 방식 | 제어 노드에서 대상 서버로 명령 전송 |
| 모듈 기반 | 3,000+ 내장 모듈 (패키지 설치, 파일 관리, 클라우드 등) |
구성 요소
| 구성요소 | 설명 |
|---|---|
| Inventory | 관리 대상 서버 목록 (INI 또는 YAML) |
| Playbook | 자동화 작업 정의 (YAML) |
| Role | 재사용 가능한 작업 묶음 (디렉터리 구조 표준화) |
| Collection | Role + Module + Plugin 패키지 (Galaxy에서 배포) |
| Module | 개별 작업 단위 (apt, copy, service 등) |
| Facts | 대상 서버의 시스템 정보 자동 수집 |
Playbook 예제
---
- name: 웹 서버 설정
hosts: webservers
become: yes
tasks:
- name: Nginx 설치
apt:
name: nginx
state: present
update_cache: yes
- name: 설정 파일 배포
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Restart Nginx
- name: Nginx 시작 및 활성화
service:
name: nginx
state: started
enabled: yes
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted# 실행
ansible-playbook -i inventory.yml playbook.yml
# Ad-hoc 명령 (단일 작업)
ansible webservers -m ping
ansible webservers -m shell -a "uptime"Terraform과의 관계
실무에서는 Terraform + Ansible 조합이 일반적:
| 도구 | 역할 | 비유 |
|---|---|---|
| Terraform | 인프라 프로비저닝 (생성/삭제) | “서버를 만든다” |
| Ansible | 인프라 구성 관리 (설정/설치) | “서버를 설정한다” |
Terraform (EC2 생성) → Ansible (Nginx 설치, 앱 배포, 설정 적용)
vs 다른 구성 관리 도구
| 항목 | Ansible | Chef | Puppet |
|---|---|---|---|
| 에이전트 | 불필요 (SSH) | 필요 | 필요 |
| 언어 | YAML | Ruby | 독자 DSL |
| 방식 | Push | Pull | Pull |
| 학습 곡선 | 낮음 | 높음 | 중간 |
| 대규모 관리 | 보통 | 좋음 | 좋음 |
장단점
장점:
- 에이전트 불필요 → 설정 부담 최소, SSH만 있으면 즉시 사용
- YAML이라 배우기 쉬움
- Python 기반 → 커스텀 모듈 작성 용이
- 3,000+ 모듈로 대부분의 인프라 작업 커버
단점:
- 대규모 (수천 대) 환경에서 성능 저하 (SSH 기반 한계)
- 선언적이지 않음 → 드리프트 감지 약함
- State 관리 없음 (실행할 때마다 전체 검사)
- Windows 지원은 Linux 대비 제한적
관련 항목
- IaC (Infrastructure as Code) — IaC 도구 종합 비교
- Terraform — 인프라 프로비저닝 도구 (Ansible과 보완적)
- DevOps
- CI-CD — 파이프라인에서 Ansible 실행
- Docker — 컨테이너 환경 관리