Devops/Ansible
[Ansible] 앤서블(Ansible) 입문 가이드
일요일좋아하는사람
2025. 4. 19. 22:28
728x90
반응형
들어가며
Ansible은 서버를 자동으로 설정하고 구성해주는 IT 자동화 도구입니다. 복잡한 스크립트 없이 YAML 형식의 Playbook만으로 다양한 서버 작업을 할 수 있어, DevOps나 클라우드 운영에서 필수 도구로 자리잡고 있습니다.
이 초급편에서는 Ansible의 개념과 설치 방법, 인벤토리와 모듈 사용법, 가장 기본적인 플레이북 예제를 통해 자동화의 첫걸음을 배워봅니다.
목차
- Ansible이란 무엇인가?
- Ansible 설치 방법
- 인벤토리: 대상 서버 관리
- Ad-hoc 명령어로 서버 제어하기
- 모듈 소개 및 예제
- 기초 플레이북 작성법
- 변수, 조건문, 반복문 기초
- 에러 해결과 디버깅
- 정리 및 다음 단계 안내
1. Ansible이란 무엇인가?
Ansible은 Python으로 작성된 오픈소스 IT 자동화 도구로, 원격 서버에 에이전트를 설치할 필요 없이 SSH 기반으로 작동합니다. 주로 다음과 같은 작업을 자동화합니다:
- 서버 패키지 설치 및 구성
- 서비스 시작/중지
- 파일 복사 및 템플릿 적용
- 복수 서버의 배포 자동화
특징 요약
- Agentless: 별도 데몬 설치 없이 SSH로만 운영
- Idempotent: 몇 번 실행해도 같은 결과를 유지
- 모듈 기반 구조: 필요한 기능은 모듈로 제공
- YAML 기반 문법: 사람이 읽기 쉬운 문법 사용
2. Ansible 설치 방법
Ubuntu/Debian
sudo apt update
sudo apt install ansible -y
CentOS/RHEL
sudo yum install epel-release -y
sudo yum install ansible -y
Mac (Homebrew)
brew install ansible
설치 확인
ansible --version
3. 인벤토리: 대상 서버 관리
Ansible은 인벤토리 파일을 통해 관리할 서버 리스트를 지정합니다. 기본 경로는 /etc/ansible/hosts이며, 다음과 같이 구성할 수 있습니다:
[web]
192.168.10.11
192.168.10.12
[db]
192.168.10.21
또는 -i 옵션으로 커스텀 파일 지정 가능:
ansible -i my_inventory.ini all -m ping
4. Ad-hoc 명령어로 서버 제어하기
Ad-hoc 명령은 단일 명령어로 모듈을 실행하는 방식입니다.
예제: Ping 테스트
ansible all -i inventory.ini -m ping
예제: 패키지 설치
ansible web -m apt -a "name=nginx state=present" --become
예제: 서비스 시작
ansible web -m service -a "name=nginx state=started" --become
5. 모듈 소개 및 예제
Ansible에는 다양한 모듈이 있습니다. 대표적인 모듈은 다음과 같습니다:
모듈명 설명
ping | 연결 테스트 |
command | 임의 명령 실행 |
shell | 셸 명령 실행 (파이프 허용) |
copy | 파일 복사 |
template | Jinja2 템플릿 복사 |
service | 서비스 시작/중지/재시작 |
apt/yum | 패키지 설치/삭제 |
user | 사용자 추가/삭제 |
예제: 파일 복사
ansible web -m copy -a "src=./index.html dest=/var/www/html/index.html" --become
6. 기초 플레이북 작성법
플레이북은 .yml 확장자의 YAML 파일이며, 여러 작업을 순서대로 수행할 수 있습니다.
예제: nginx 설치 및 서비스 시작
---
- name: NGINX 설치 예제
hosts: web
become: true
tasks:
- name: NGINX 설치
apt:
name: nginx
state: present
- name: NGINX 시작
service:
name: nginx
state: started
실행 명령:
ansible-playbook nginx_setup.yml -i inventory.ini
7. 변수, 조건문, 반복문 기초
변수 사용
vars:
my_package: nginx
tasks:
- name: 패키지 설치
apt:
name: "{{ my_package }}"
state: present
조건문 (when)
- name: 우분투에서만 실행
apt:
name: nginx
state: present
when: ansible_os_family == "Debian"
반복문 (loop)
- name: 여러 패키지 설치
apt:
name: "{{ item }}"
state: present
loop:
- git
- curl
- unzip
8. 에러 해결과 디버깅
- -v, -vvv 옵션을 사용하여 로그 출력
- 변수 출력: debug 모듈 사용
예제
- name: 변수 출력
debug:
var: ansible_distribution
- 실수로 = 빠짐, 들여쓰기 오류가 빈번하니 항상 ansible-lint로 사전 체크하는 습관을 들이세요.
9. 정리 및 다음 단계 안내
이 문서에서는 다음을 배웠습니다:
- Ansible 설치 및 구조
- 인벤토리 및 Ad-hoc 명령
- 기본 모듈 사용법과 예제
- 기초 플레이북 구조
- 변수/조건/반복문 기초
728x90
반응형