개요
Ansible은 에이전트리스(agentless) 방식으로 동작하여 관리 대상 서버에 별도의 소프트웨어를 설치할 필요가 없습니다. SSH 연결을 통해 명령을 실행하고, Python으로 작성된 모듈을 사용하여 다양한 작업을 수행합니다. 인벤토리 파일을 통해 관리 대상 호스트를 정의하고, 애드혹(ad-hoc) 명령이나 플레이북을 사용하여 작업을 자동화할 수 있습니다.
주요 특징
- 에이전트리스 방식 (관리 대상 서버에 에이전트 불필요)
- SSH 기반 통신 (기존 인프라 활용)
- YAML 플레이북 사용 (간결하고 가독성 높은 자동화 스크립트)
- 구성 관리, 애플리케이션 배포, 오케스트레이션 등 다양한 IT 자동화
주요 옵션
Ansible 명령어는 인벤토리 파일에 정의된 호스트 그룹에 대해 특정 모듈을 실행하거나 애드혹 명령을 수행할 때 사용됩니다.
기본 실행 옵션
정보 및 디버깅
생성된 명령어:
명령어를 조합해 보세요.
설명:
`ansible` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 예시
Ansible 명령어를 사용하여 원격 서버에 대한 다양한 작업을 수행할 수 있습니다.
모든 호스트 연결 확인 (ping)
ansible all -m ping
인벤토리에 정의된 모든 호스트에 대해 연결 가능 여부를 테스트합니다.
웹 서버 그룹에 명령어 실행
ansible webservers -a "uptime"
인벤토리의 'webservers' 그룹에 속한 호스트에서 'uptime' 명령어를 실행합니다.
특정 호스트에 패키지 설치 (sudo 사용)
ansible node1 -b -m apt -a "name=nginx state=present"
node1 호스트에 'nginx' 패키지를 설치합니다. -b 옵션으로 sudo 권한을 사용합니다.
사용자 지정 인벤토리 파일 사용
ansible all -i my_inventory.ini -a "df -h"
기본 인벤토리 파일 대신 'my_inventory.ini' 파일을 사용하여 모든 호스트에 'df -h' 명령을 실행합니다.
원격 사용자 지정하여 파일 복사
ansible webservers -u deploy_user -m copy -a "src=./index.html dest=/var/www/html/"
원격 사용자 'deploy_user'로 접속하여 로컬의 'index.html' 파일을 원격 서버의 '/var/www/html/' 경로로 복사합니다.
설치
Ansible은 대부분의 리눅스 배포판에 기본으로 포함되어 있지 않으므로, 패키지 관리자나 Python pip를 통해 설치해야 합니다. Python pip를 통한 설치가 가장 권장되는 방법입니다.
Python pip를 이용한 설치 (권장)
Python이 설치되어 있다면 pip를 사용하여 Ansible을 설치할 수 있습니다.
- 설치 명령어: pip install ansible
- 업그레이드 명령어: pip install --upgrade ansible
Ubuntu/Debian
APT 패키지 관리자를 사용하여 설치합니다.
- 설치 명령어: sudo apt update && sudo apt install ansible
CentOS/RHEL
YUM/DNF 패키지 관리자를 사용하여 설치합니다. EPEL 저장소가 필요할 수 있습니다.
- EPEL 저장소 설치: sudo yum install epel-release
- 설치 명령어: sudo yum install ansible
팁 & 주의사항
Ansible을 효과적으로 사용하기 위한 팁과 주의할 점입니다.
Ansible 사용 팁
- **인벤토리 파일 관리**: 관리 대상 호스트를 체계적으로 그룹화하고 정의하는 것이 중요합니다. `ini` 또는 `yaml` 형식을 사용할 수 있습니다.
- **플레이북 사용 권장**: 간단한 애드혹 명령 외에는 재사용성, 가독성, 버전 관리를 위해 YAML 기반의 플레이북(`ansible-playbook`)을 사용하는 것이 좋습니다.
- **멱등성(Idempotency) 이해**: Ansible은 작업을 여러 번 실행해도 시스템 상태가 동일하게 유지되도록 설계되어 있습니다. 이를 멱등성이라고 하며, 자동화 스크립트 작성 시 이 개념을 활용해야 합니다.
- **SSH 키 기반 인증**: 비밀번호 대신 SSH 키를 사용하여 보안을 강화하고 자동화 프로세스를 간소화하는 것이 좋습니다.
- **Vault 사용**: 민감한 정보(비밀번호, API 키 등)는 Ansible Vault를 사용하여 암호화하여 관리해야 합니다.