Devops/Ansible

[Ansible] 앤서블(Ansible) 입문 가이드

일요일좋아하는사람 2025. 4. 19. 22:28
728x90
반응형

앤서블(Ansible)

들어가며

Ansible은 서버를 자동으로 설정하고 구성해주는 IT 자동화 도구입니다. 복잡한 스크립트 없이 YAML 형식의 Playbook만으로 다양한 서버 작업을 할 수 있어, DevOps나 클라우드 운영에서 필수 도구로 자리잡고 있습니다.

이 초급편에서는 Ansible의 개념과 설치 방법, 인벤토리와 모듈 사용법, 가장 기본적인 플레이북 예제를 통해 자동화의 첫걸음을 배워봅니다.


목차

  1. Ansible이란 무엇인가?
  2. Ansible 설치 방법
  3. 인벤토리: 대상 서버 관리
  4. Ad-hoc 명령어로 서버 제어하기
  5. 모듈 소개 및 예제
  6. 기초 플레이북 작성법
  7. 변수, 조건문, 반복문 기초
  8. 에러 해결과 디버깅
  9. 정리 및 다음 단계 안내

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
반응형