Overview
이 글에서는 Ansible이란 무엇이며, 이를 활용하여 서버를 자동화하고 인프라를 관리하는 방법을 다룬다.
Ansible은 Infrastructure as Code (IaC)를 지원하는 오픈소스 기반의 자동화 도구로, 서버 관리 및 설정을 간편하게 수행할 수 있도록 도와준다.
이제 Ansible 설치부터 실습까지 차근차근 진행해보자.

📅 관련 글
2023.12.25 - [IaC/Configuration Management] - Ansible 활용 - ansible-galaxy에 Role/Collection 업로드
2024.02.29 - [Open Source Software] - Cephadm-ansible이란?
Ansible이란?
Ansible은 서버 인프라를 코드 기반으로 자동 설치 및 구축/관리/프로비저닝하는 자동화 도구이다.
전통적인 방식에서는 관리자가 직접 서버에 접속하여 수동으로 설정해야 했지만,
Ansible을 활용하면 자동화된 인프라 구축이 가능하다.

Ansible의 특징
1️⃣ Agentless
- 별도의 에이전트 설치 없이 SSH 프로토콜을 이용하여 원격 서버를 관리한다.
2️⃣ 접근 용이성
- YAML 형식의 Playbook을 사용하여 쉽게 서버 자동화 가능
- 가독성이 뛰어나 초보자도 쉽게 학습 가능
3️⃣ 멱등성 (Idempotence)
- 같은 명령을 여러 번 실행해도 동일한 결과를 보장
- 서버 설정 시 중복 실행으로 인한 문제 발생 방지
Ansible 기본 개념 및 용어
| 용어 | 설명 |
| Controller 서버 | Ansible이 설치된 서버, 명령을 실행하는 주체 |
| Inventory (호스트 목록) | 관리할 원격 서버 목록을 저장하는 파일 (/etc/ansible/hosts) |
| Playbook | YAML 형식으로 정의된 자동화 스크립트 |
| Module | Ansible이 제공하는 다양한 기능 (ex: 파일 복사, 패키지 설치) |
| Task | Playbook에서 실행되는 개별 작업 |
Ansible 설치 및 초기 설정
1️⃣ Ansible 설치 (CentOS 7.9 기준)
Ansible은 Controller 서버에서만 설치하면 된다.
먼저 EPEL(Extra Packages for Enterprise Linux) 저장소를 추가한 후 설치한다.
# EPEL 저장소 추가
sudo yum install -y epel-release
# 저장소 목록 확인
sudo yum repolist
# Ansible 설치
sudo yum install -y ansible
# 설치 확인
ansible --version
Ansible이 정상적으로 설치되었는지 버전을 확인한다.
2️⃣ SSH Key 설정 (Controller ↔ 원격 서버 간 인증)
Ansible은 SSH 기반으로 원격 서버에 명령을 실행한다.
따라서 Controller 서버와 원격 서버 간 SSH Key 기반 인증을 설정해야 한다.
# SSH 키 생성
ssh-keygen
# 원격 서버에 SSH Key 복사 (계정 비밀번호 입력 필요)
ssh-copy-id [원격서버계정ID]@[원격서버IP]
# SSH 접속 확인 (비밀번호 없이 로그인 가능해야 함)
ssh [원격서버계정ID]@[원격서버IP]
SSH 비밀번호 없이 원격 서버에 접속되면 성공!
3️⃣ Inventory 파일 설정
관리할 원격 서버 목록을 `/etc/ansible/hosts` 파일에 추가한다.
sudo vi /etc/ansible/hosts
...
[web]
192.168.1.10
192.168.1.11
[db]
192.168.1.20
이제 Ansible이 이 서버들을 관리할 수 있다.
4️⃣ 원격 서버 연결 테스트 (Ping 확인)
ansible all -m ping
모든 서버에서 "SUCCESS" 메시지가 출력되면 정상적으로 설정 완료!
Ansible 명령어 사용법
1️⃣ 기본 명령어 구조
ansible [host 또는 host그룹] -m [모듈] -a [옵션]
- `all`: 인벤토리에 등록된 모든 서버
- `-m`: 실행할 모듈
- `-a`: 모듈에 전달할 인자
2️⃣ 원격 서버에서 명령 실행 (Shell 모듈)
# 원격 서버의 uptime 확인
ansible all -m shell -a "uptime"
# 디스크 사용량 확인
ansible all -m shell -a "df -h"
# 메모리 사용량 확인
ansible all -m shell -a "free -h"
3️⃣ 원격 서버에 파일 전송 (Copy 모듈)
# Controller 서버의 test.txt를 원격 서버로 복사
ansible all -m copy -a "src=~/test.txt dest=~/test.txt"
모든 원격 서버에 `test.txt` 파일이 복사됨
4️⃣ 사용자 생성 (User 모듈)
# 원격 서버에 사용자 'somaz' 생성
ansible all -m user -a "name=somaz password=1 shell=/bin/bash"
모든 원격 서버에 somaz 계정이 생성됨
5️⃣ 패키지 설치 (Yum/Apt 모듈)
# CentOS (Yum 모듈 사용)
ansible all -m yum -a "name=httpd state=present"
# Ubuntu (Apt 모듈 사용)
ansible all -m apt -a "name=apache2 state=present"
모든 원격 서버에 웹서버 패키지가 설치됨
Ansible 구성 파일
| 파일 | 설명 |
| /etc/ansible/ansible.cfg | Ansible 환경 설정 파일 |
| /etc/ansible/hosts | 관리할 원격 서버 목록 (Inventory) |
| Playbook 파일 (.yml) | 자동화 스크립트 저장 |
Ansible 실습
1️⃣ 원격 서버 작업 자동화 (Shell 모듈 활용)
# 시스템 정보 확인
ansible all -m shell -a "uptime"
ansible all -m shell -a "df -h"
ansible all -m shell -a "free -h"
2️⃣ 사용자 및 파일 관리
# 사용자 생성
ansible all -m user -a "name=somaz password=1 shell=/bin/bash"
# 파일 복사
ansible all -m copy -a "src=/etc/resolv.conf dest=/etc/resolv.conf"
3️⃣ 패키지 설치 및 관리
# Apache 웹 서버 설치 (CentOS)
ansible all -m yum -a "name=httpd state=present"
# Apache 웹 서버 설치 (Ubuntu)
ansible all -m apt -a "name=apache2 state=present"
마무리
Ansible이 무엇인지 개념을 익혔다.
Ansible 설치 및 SSH 설정을 완료하였다.
기본적인 Ansible 명령어를 활용하여 원격 서버를 자동화하였다.
Playbook을 활용한 자동화 작업을 배울 준비가 되었다.
이제 Ansible Playbook을 활용하여 더욱 강력한 자동화 작업을 진행해보자!
Reference
🔗 Ansible 공식 문서
🔗 Ansible GitHub Repository
🔗 Ansible Playbooks 예제
'IaC > Configuration Management' 카테고리의 다른 글
| Git에서 2개의 계정(SSH Key) 사용하기 (2) | 2024.06.13 |
|---|---|
| Git Rebase vs Merge (0) | 2024.06.03 |
| Ansible 활용 - ansible-galaxy에 Role/Collection 업로드 (0) | 2023.12.25 |