개요
Ansible은 Agentless 방식의 IT 자동화 도구로 서버 설정 관리, 애플리케이션 배포, 작업 오케스트레이션을 단일 툴에서 사용할 수 있다.
주요 특징
- Agentless : 제어 노드에서 SSH(또는 WinRM)을 통해 원격 노드에 접속해 명령을 실행한다.
- YAML 기반 Playbook : 사람이 읽기 쉬운 YAML 로 자동화 작업을 작성한다 (YAML 특성상 문법이 까다로운 점이 있다)
- 모듈 기반 확장성 : 모듈 형태로 여러 개의 기능들을 조합하여 사용할 수 있다.
- 멱등성 : 같은 플레이북을 여러 번 실행해도 시스템 상태가 의도한 상태로 유지되도록 설계할 수 있다
- 여기서 주의할 점은 모든 ansible 모듈에서 멱등성을 지원하지 않는다 (대표적으로 shell, command).
- 멱등성을 지원하지 않는 모듈도 존재하므로 플레이북 내에 멱등성이 적용되도록 설계에 힘써야 한다.
- 커뮤니티 & 생태계 풍부
- Ansible Galaxy : 사용자가 작성한 Ansible 모듈을 공유하는 플랫폼
- AWX (Ansible Tower) : Ansible 기반의 오픈 소스 IT 자동화 플랫폼 (Ansible Tower 는 상업용 유료 버전)
주요 구성 요소
-
Control Node (제어 노드) Ansible을 설치하고 Playbook을 실행하는 머신. 보통 운영자 PC나 CI 서버가 된다.
-
Managed Nodes (관리 대상 노드) 제어 노드가 SSH(리눅스) 또는 WinRM(윈도우)을 통해 접속하는 서버들. 별도 에이전트 설치 없음.
-
Inventory (인벤토리) 관리 대상 노드의 목록(호스트, 그룹, 변수)을 저장. ini나 yaml 형식, 동적 인벤토리 스크립트도 가능(AWS, GCP 등).
-
Playbook 자동화 작업(플레이)의 모음. YAML로 작성되며 각 플레이는 어떤 호스트에 어떤 역할(Tasks)을 수행할지 기술.
-
Module (모듈) Ansible이 원격 노드에서 실행하는 기능 단위. 예: apt, yum, service, copy, template, git 등.
-
Role (역할) 재사용 가능한 파일/태스크/변수/템플릿의 묶음. 복잡한 구성을 모듈화해 프로젝트 구조를 깔끔하게 함.
-
Facts Ansible이 관리 대상 노드에서 수집하는 시스템 정보(운영체제, IP, 메모리 등). 플레이 내에서 변수처럼 사용 가능.
-
Vault 암호·비밀값(예: DB 비밀번호)을 안전하게 암호화해 관리하는 기능.
-
AWX / Ansible Tower 웹 UI, RBAC(권한관리), 스케줄링, 감사로그, 작업 템플릿 등을 제공하는 오픈소스 /상업 레이어.
간단한 동작 과정
-
제어 노드에서 ansible-playbook 실행 → Inventory에서 대상 호스트 선정
-
SSH로 접속(연결 플러그인에 따라 방식이 다를 수 있음)
-
필요한 모듈과 파라미터를 원격 노드에 전송(보통 JSON 형태)
-
원격 노드에서 모듈이 실행되고 결과가 제어 노드로 반환
-
제어 노드는 결과를 종합하여 다음 작업 수행(멱등성 유지)
개인적으로 Ansible을 사용하면서 얻은 Tip
- Playbook/Role은 버전관리(Git)로 관리한다.
- Github를 사용할 경우, SSH 키 또는 Personal Access Token은 반드시 리포지토리에 대한 pull/push 권한만 가지는 것이 좋다 (인증 정보가 유출되어도 피해를 최소화하기 위함)
- 패스워드와 같은 민감한 정보는 반드시 Vault로 암호화한다.
- Vault는 Ansible 뿐만 아니라 AWX에서도 동일하게 사용할 수 있다.
-
Ansible에서는 작업 기록(로그)와 감사(audit) 기능이 빈약하다. 해당 기능들을 사용하고자 한다면 Ansible Tower/AWX를 도입하는 것이 좋다.
- Ansible 공부에 도움이 되는 자료들은 아래와 같다.
- 기초
- 앤서블로 시작하는 인프라 자동화 (한빛미디어)
- 앤서블 시작과 실행 3/e (에이콘출판)
- 실무적인 내용은 아래의 문서를 참고해도 좋다. 다만 해당 문서는 지침 문서 (Cursor AI을 통해 Ansible을 작성하기 위한 Rule 파일)이기 때문에 사용 예제는 없다.
- https://github.com/sanjeed5/awesome-cursor-rules-mdc/blob/main/rules-mdc/ansible.mdc
- 기초