Ansible 신속 작업을 위한 핵심 애드혹 명령어 마스터하기
플레이북을 작성하지 않고 빠른 확인, 일회성 수정, 파일 변경, 팩트 수집을 위해 Ansible 애드혹 명령어를 사용하세요.
빠른 Ansible 작업을 위한 필수 애드혹 명령어 마스터하기
Ansible 애드혹 명령어를 사용하면 한 호스트 또는 전체 그룹에서 하나의 빠른 작업을 실행할 수 있습니다. 플레이북을 먼저 작성하지 않고 접근 테스트, 디스크 공간 확인, 파일 복사, 서비스 재시작, 팩트 조사가 필요할 때 유용합니다.
이는 플레이북을 대체하지 않습니다. 즉각적인 작업에 사용하고, 반복되거나 위험한 작업은 버전 관리되는 자동화로 옮기세요.
기본 명령어 구조
애드혹 명령어는 다음과 같은 형태를 따릅니다:
ansible <패턴> -m <모듈_이름> -a "<모듈_인수>" [옵션]
호스트 패턴은 인벤토리 대상을 선택합니다. 모듈은 Ansible이 수행할 작업을 결정합니다. 인수는 모듈별 값을 전달합니다.
일반적인 옵션은 다음과 같습니다:
-i <인벤토리>또는--inventory <인벤토리>: 특정 인벤토리 파일 또는 인벤토리 소스를 사용합니다.-u <사용자>또는--user <사용자>: 특정 원격 사용자로 연결합니다.-b또는--become: 권한 상승(보통 sudo)을 사용합니다.-k또는--ask-pass: SSH 비밀번호를 묻습니다.-K또는--ask-become-pass: sudo 비밀번호를 묻습니다.--limit <하위_집합>: 선택된 호스트를 더 좁힙니다.
-i를 전달하지 않으면 Ansible은 설정된 인벤토리를 사용합니다. 많은 시스템에서 /etc/ansible/hosts이지만, ansible.cfg에서 변경할 수 있습니다.
ping으로 접근 테스트
ping 모듈은 ICMP 에코 패킷을 보내지 않습니다. Ansible의 일반 전송을 통해 연결하고, 대상에서 작은 모듈을 실행한 후 pong을 기대합니다.
ansible all -m ping
한 그룹의 경우:
ansible webservers -m ping
성공적인 결과는 다음과 같습니다:
web01.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
실패하면 상위 수준 작업을 문제 해결하기 전에 인벤토리, DNS, SSH 키, 원격 사용자, sudo 설정, Python 가용성을 수정하세요.
command로 간단한 명령어 실행
command 모듈은 원격 호스트에서 직접 프로그램을 실행합니다. 셸을 호출하지 않으므로 파이프, 리디렉션, 글로브 확장, $VARIABLE 확장이 터미널에서처럼 작동하지 않습니다.
가동 시간 확인:
ansible webservers -m command -a "uptime"
디스크 사용량 확인:
ansible all -m command -a "df -h"
sudo로 보호된 디렉토리 나열:
ansible dbservers -m command -a "ls -l /var/log" --become
셸 기능이 필요하지 않을 때는 먼저 command를 사용하세요. 추론하기 쉽고 우발적인 셸 해석을 피할 수 있습니다.
셸 기능이 필요할 때만 shell 사용
shell 모듈은 원격 호스트의 셸을 통해 명령어를 실행합니다. 파이프, 리디렉션, 변수 확장, 셸 조건문에 사용하세요.
가장 큰 로그 디렉토리 찾기:
ansible databases -m shell -a "du -sh /var/log/* | sort -rh | head -n 5"
원격 환경 변수 확인:
ansible all -m shell -a "printf '%s\n' \"$PATH\""
동적 입력에 주의하세요. 사용자 제공 값이 인용 및 검증 없이 셸 명령어에 삽입되면 명령어 주입 버그가 발생할 수 있습니다.
파일 편집의 경우 셸 리디렉션 대신 목적에 맞는 모듈을 선호하세요. 예를 들어, lineinfile로 관리되는 줄을 추가합니다:
ansible webservers -m lineinfile -a "path=/etc/app/app.conf line='feature_enabled=true' create=yes" --become
이는 echo ... >> file로 추가하는 것보다 안전하고 반복 가능합니다.
copy로 파일 복사
copy 모듈은 컨트롤 노드에서 관리 호스트로 파일을 전송합니다.
ansible webservers -m copy -a "src=./myscript.sh dest=/tmp/myscript.sh mode=0755"
루트 소유권이 필요한 설정 파일 복사:
ansible all -m copy -a "src=./app.conf dest=/etc/app/app.conf owner=root group=root mode=0644" --become
대상에 이미 동일한 내용과 메타데이터가 있으면 Ansible은 변경 없음을 보고합니다.
file로 경로 관리
file 모듈을 사용하여 디렉토리 생성, 경로 제거, 소유권 설정, 권한 설정, 심볼릭 링크 생성을 수행합니다.
디렉토리 생성:
ansible appservers -m file -a "path=/opt/my_app state=directory mode=0755 owner=app group=app" --become
오래된 파일 제거:
ansible host1 -m file -a "path=/tmp/old_file.txt state=absent"
심볼릭 링크 생성:
ansible appservers -m file -a "src=/opt/my_app/releases/current dest=/opt/my_app/current state=link"
setup으로 팩트 수집
setup 모듈은 OS, 네트워크, CPU, 메모리, 장치 세부 정보 등 호스트에 대한 팩트를 수집합니다.
한 호스트에서 모든 팩트 수집:
ansible webserver1 -m setup
작은 부분만 필요할 때 팩트 필터링:
ansible all -m setup -a "filter=ansible_distribution*"
출력이 클 수 있으므로 필터링을 통해 문제 해결을 읽기 쉽게 유지하세요.
애드혹 명령어 또는 플레이북 선택
빠른 확인과 일회성 작업에는 애드혹 명령어를 사용하세요:
ping으로 연결 테스트.command로 상태 확인.copy로 알려진 파일 하나 복사.file로 경로 하나 생성 또는 제거.- 문제 해결 중 팩트 수집.
작업이 반복적이거나, 여러 단계이거나, 팀원이 검토하거나, 버전 관리와 예측 가능한 구조가 필요할 정도로 위험할 때는 플레이북을 사용하세요.
실행 전 안전 확인
파괴적인 작업을 실행하기 전에 호스트 패턴을 확인하세요:
ansible webservers --list-hosts
영향 범위를 줄이려면 --limit를 사용하세요:
ansible all --limit web01.example.com -m ping
command와 shell은 자동으로 멱등성이 없습니다. useradd deploy와 같은 명령어는 방어적으로 작성하지 않으면 두 번째 실행에서 실패할 수 있습니다. user, file, copy, lineinfile과 같은 모듈은 일반적으로 더 안전한 반복 동작을 제공합니다.
핵심 요약
Ansible 애드혹 명령어는 빠르고 목표 지향적인 작업에 가장 적합합니다. ping으로 시작하고, 간단한 확인에는 command를 사용하며, 실제 셸 구문이 필요할 때만 shell을 예약하고, 작업에 맞는 copy, file, lineinfile, setup과 같은 모듈을 선호하세요.