랩실 노트북과 집 데스크톱을 Ansible Control Node로 사용해 Azure Load Balancer의 Inbound NAT Port를 거쳐 두 Rocky Linux VM을 관리할 수 있는지 확인한다. 이후 서버 설정을 변경하기 전에 Nginx 서비스와 localhost HTTP 상태가 정상인지 읽기 전용 Playbook으로 검증한다.
- 실제 Load Balancer Public IP, SSH Private Key, 관리 위치의 Source IP는 저장소에 기록하지 않는다.
- 공개용
hosts.example.ini에는 Placeholder만 둔다. - 실제 접속 정보는 Git에서 제외된
hosts.lab.ini,hosts.home.ini에 둔다. hosts.local.ini심볼릭 링크가 현재 Control Node에 맞는 실제 Inventory를 가리키도록 한다.- 두 VM은 같은 Load Balancer Public IP를 사용하지만 Frontend Port
50001,50002로 구분한다.
Control Node
└─ Load Balancer Public IP
├─ TCP 50001 → vm-web01:22
└─ TCP 50002 → vm-web02:22
ansible-inventory --graph확인된 구조:
@all:
|--@ungrouped:
|--@webservers:
| |--vm-web01
| |--vm-web02
ansible webservers -m ansible.builtin.ping랩실 노트북과 집 데스크톱에서 모두 두 VM의 응답을 확인했다.
vm-web01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
vm-web02 | SUCCESS => {
"changed": false,
"ping": "pong"
}
이 ping은 ICMP Echo가 아니라 SSH 접속, 원격 Python 실행, Ansible Module 실행 가능 여부를 확인한다.
Managed Node의 Python 경로는 두 VM 모두 /usr/bin/python3.9로 명시했다.
ansible vm-web01 \
--become \
-m ansible.builtin.command \
-a 'nginx -t'실제 결과:
vm-web01 | CHANGED | rc=0 >>
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
rc=0과 두 성공 메시지로 vm-web01의 Nginx 설정 문법이 정상임을 확인했다. command Module은 명령이 상태를 변경했는지 자동 판단하지 못하므로 CHANGED가 표시됐지만, nginx -t는 설정을 적용하거나 서비스를 재시작하지 않았다.
ansible-playbook \
--syntax-check \
playbooks/web-baseline.yml실제 결과:
playbook: playbooks/web-baseline.yml
ansible-playbook playbooks/web-baseline.ymlPlaybook은 다음 세 작업을 수행한다.
service_facts로 서비스 상태 수집assert로nginx.service가running인지 확인uri로 각 VM의http://localhost/가 HTTP 200을 반환하는지 확인
실제 최종 결과:
PLAY RECAP
vm-web01 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
vm-web02 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- 랩실 노트북과 집 데스크톱 모두 두 Azure VM을 Ansible로 관리할 수 있다.
- Inventory가
vm-web01,vm-web02를 올바르게 구분한다. - SSH Key 인증, Inbound NAT Port Mapping, 원격 Python, Ansible Module 실행 경로가 정상이다.
--become을 사용한 원격 sudo 실행이 정상이다.vm-web01의 Nginx 설정 문법 검사가 성공했다.- 두 VM의 Nginx 서비스가 실행 중이다.
- 두 VM의 localhost HTTP 응답이 200이다.
- Baseline Playbook은 상태 확인만 수행했으므로
changed=0이다.
- Nginx Package와 Service 설정
- 웹 페이지 내용
- firewalld 설정
- Azure Load Balancer, NSG, Health Probe 설정
이번 단계의 목적은 자동화 적용 전 정상 상태를 기준선으로 남기는 것이었다.
이 Baseline을 기준으로 구성 Playbook을 두 VM에 적용하고 멱등성과 Drift 복구를 후속 검증했다.