환경 정보
| 항목 | 내용 |
|---|---|
| AWX | 24.6.1 (K3s + AWX Operator 2.19.1) |
| 관리 대상 | Ubuntu 서버 6대 |
| 알림 | 텔레그램 봇 (Webhook 방식) |
2편에서 인벤토리/자격증명/프로젝트/잡 템플릿 설정을 완료한 상태에서 진행합니다.
이번 편에서 할 것
apt-update Playbook 잡 템플릿 생성
↓
수동 실행으로 정상 동작 확인
↓
스케줄러 설정 (매일 새벽 3시 자동 실행)
↓
텔레그램 봇 생성
↓
AWX Notifier 설정 (성공/실패 분리)
↓
자동화 완성!STEP 1. apt-update 잡 템플릿 생성
Playbook 파일 확인
2편에서 작성한 apt_update.yml 이 이미 있어야 합니다.
# PVC 경로 확인
PVC_PATH=$(find /var/lib/rancher/k3s/storage/ -type d -name "*awx-projects-claim*")
ls $PVC_PATH/homelab/
# apt_update.yml ping_test.yml system_info.ymlAWX UI에서 잡 템플릿 생성
Resources → Templates → Add → Add job template| 항목 | 값 |
|---|---|
| Name | apt-update |
| Job Type | Run |
| Inventory | homelab-ubuntu |
| Project | homelab-project |
| Playbook | apt_update.yml |
| Credentials | homelab-ssh-key |
Save 클릭
STEP 2. 수동 실행으로 동작 확인
▶️ Launch 클릭 후 결과 확인:
PLAY [APT 패키지 업데이트] ***********************************
TASK [apt 캐시 업데이트] *************************************
ok: [server-01]
ok: [server-02]
ok: [server-03]
ok: [server-04]
ok: [server-05]
ok: [server-06]
TASK [업데이트 결과 출력] *************************************
ok: [server-01] => {"msg": "server-01 업데이트 완료"}
...
PLAY RECAP **************************************************
server-01 : ok=2 changed=0 unreachable=0 failed=0
server-02 : ok=2 changed=0 unreachable=0 failed=0
server-03 : ok=2 changed=0 unreachable=0 failed=0
server-04 : ok=2 changed=0 unreachable=0 failed=0
server-05 : ok=2 changed=0 unreachable=0 failed=0
server-06 : ok=2 changed=0 unreachable=0 failed=0failed=0 확인 후 다음 단계로 진행한다.

STEP 3. 스케줄러 설정
apt-update 템플릿 상세 화면에서 설정한다.
Resources → Templates → apt-update
→ 상단 Schedules 탭 → Add| 항목 | 값 |
|---|---|
| Name | apt-update-daily |
| Start date | 오늘 날짜 |
| Start time | 04:00 AM |
| Time Zone | Asia/Seoul |
| Repeat frequency | Day |
| Every | 1 |
Save 클릭
새벽 4시를 추천하는 이유: 서버 부하가 가장 낮은 시간대이고, 업무/게임 중 갑자기 업데이트가 돌아가는 일이 없다.
저장 후 스케줄 목록:
apt-update-daily Daily 04:00 AM KST ✅
STEP 4. 텔레그램 봇 생성
BotFather로 봇 만들기
텔레그램 앱에서:
1. @BotFather 검색 → START
2. /newbot 입력
3. 봇 이름 입력 (예: AWX Homelab Bot)
4. 봇 username 입력 (예: awx_homelab_bot) ← _bot으로 끝나야 함성공하면 Token 발급:
7xxxxxxxxx:AAxxxxxxxxxxxxxxxxxxxxxxxChat ID 확인
1. 만든 봇 검색 → START 클릭
2. 아무 메시지 전송 (예: 안녕)
3. 브라우저에서 아래 URL 열기:https://api.telegram.org/bot<TOKEN>/getUpdates결과에서 "id" 값이 Chat ID:
{
"result": [{
"message": {
"chat": {
"id": 123456789
}
}
}]
}
⚠️
result:[]로 나오면 봇에게 메시지를 아직 안 보낸 것. 봇에게 먼저 메시지를 보낸 후 다시 URL 새로고침한다.
터미널에서 전송 테스트
TOKEN="봇토큰"
CHAT_ID="ChatID"
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-H "Content-Type: application/json" \
-d "{\"chat_id\": \"${CHAT_ID}\", \"text\": \"AWX 테스트\"}"성공:
{"ok":true,"result":{"message_id":1,...}}STEP 5. AWX Notifier 설정
성공 알림 Notifier 생성
Administration → Notifiers → Add| 항목 | 값 |
|---|---|
| Name | telegram-success |
| Organization | Default |
| Type | Webhook |
| 대상 URL | https://api.telegram.org/bot토큰/sendMessage?chat_id=ChatID&text=✅홈랩%20apt-update%20성공! |
| HTTP 헤더 | {"Content-Type": "application/json"} |
| HTTP 방법 | POST |
Save
실패 알림 Notifier 생성
Administration → Notifiers → Add| 항목 | 값 |
|---|---|
| Name | telegram-failure |
| Organization | Default |
| Type | Webhook |
| 대상 URL | https://api.telegram.org/bot토큰/sendMessage?chat_id=ChatID&text=❌홈랩%20apt-update%20실패!%20확인%20필요 |
| HTTP 헤더 | {"Content-Type": "application/json"} |
| HTTP 방법 | POST |
Save
⚠️ Webhook Body 방식 주의: AWX Webhook Notifier에서 "메시지 사용자 정의" Body에 텔레그램 JSON을 넣는 방식은 동작하지 않는다. AWX가 자체 JSON으로 감싸서 보내기 때문. URL 파라미터 방식(
?text=메시지)을 사용해야 한다.

STEP 6. 잡 템플릿에 알림 연결
Resources → Templates → apt-update
→ Notifications 탭| 항목 | Notifier |
|---|---|
| Start | 설정 안 함 |
| Success | telegram-success ✅ ON |
| Failure | telegram-failure ✅ ON |
STEP 7. 최종 확인
▶️ Launch 로 수동 실행 후 텔레그램 메시지 확인:
✅홈랩 apt-update 성공!
최종 자동화 흐름
매일 새벽 4시
↓ AWX 스케줄러 자동 실행
Ubuntu 서버 6대 apt 업데이트
↓ 성공 시
텔레그램: ✅홈랩 apt-update 성공!
↓ 실패 시
텔레그램: ❌홈랩 apt-update 실패! 확인 필요이제 손 안 대도 매일 알아서 돌아간다.
트러블슈팅
AWX Notifier 테스트 실패 (Webhook Body 방식)
원인: AWX Webhook은 자체 JSON 형식으로 감싸서 전송하기 때문에 Body에 텔레그램 형식 JSON을 넣어도 텔레그램이 인식하지 못함
해결: Body 대신 URL 파라미터 방식 사용
# 잘못된 방식 (Body에 JSON 입력)
{"chat_id": "xxx", "text": "메시지"} ← 동작 안 함
# 올바른 방식 (URL 파라미터)
https://api.telegram.org/bot토큰/sendMessage?chat_id=xxx&text=메시지 ← 동작함getUpdates result가 빈 배열
원인: 봇에게 메시지를 아직 한 번도 보내지 않은 상태
해결: 텔레그램에서 봇 검색 → START → 아무 메시지 전송 후 getUpdates 재시도
마무리
스케줄러 + 텔레그램 알림까지 붙이고 나니 진짜 자동화가 된 느낌이다. 매일 새벽에 알아서 업데이트 돌고, 결과를 텔레그램으로 알려주니 아침에 폰 확인하면 어젯밤 업데이트 결과를 바로 알 수 있다.
삽질 포인트는 AWX Webhook Body 방식이 텔레그램과 호환이 안 된다는 점이었다. AWX가 자체 JSON으로 감싸버리기 때문에 텔레그램 API가 필요한 chat_id와 text 필드를 못 찾는 것이다. URL 파라미터 방식으로 우회하면 깔끔하게 해결된다.
다음 편 예고: [홈랩 IaC 자동화 #4] Terraform으로 Proxmox VM 자동 생성하기
참고 링크
👉 #1화 — Docker Compose로 홈랩 자동화 플랫폼 구축하기
👉 #2화 — Ansible AWX로 Ubuntu 서버 6대 Playbook 실행하기
👉 #4화 — Terraform으로 Proxmox VM 자동 생성하기
'IT > HomeLabs' 카테고리의 다른 글
| [홈랩 IaC 자동화 #6] AWX + Terraform 연동 - 버튼 한 번으로 Proxmox VM 자동 생성 (0) | 2026.03.31 |
|---|---|
| [홈랩 IaC 자동화 #5] Terraform + Ansible 연동 - VM 생성부터 초기 설정 자동화까지 (0) | 2026.03.28 |
| [홈랩 IaC 자동화 #4] Terraform으로 Proxmox VM 자동 생성하기 (0) | 2026.03.26 |
| [홈랩 IaC 자동화 #2] Ansible AWX로 Ubuntu 서버 6대 Playbook 실행하기 (0) | 2026.03.24 |
| [홈랩 IaC 자동화 #1] Ansible AWX 설치 - K3s + AWX Operator로 Playbook GUI 환경 구축 (0) | 2026.03.23 |
| [HomeLabs] Ansible AWX 설치 방법 - Docker Compose로 홈랩 자동화 플랫폼 구축하기 (0) | 2026.03.23 |