본문 바로가기
IT/HomeLabs

[홈랩 IaC 자동화 #3] AWX 스케줄러 + 텔레그램 알림 - 매일 자동 패키지 업데이트

by 수누다 2026. 3. 25.

환경 정보

항목 내용
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.yml

AWX 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=0

failed=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:AAxxxxxxxxxxxxxxxxxxxxxxx

Chat 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_idtext 필드를 못 찾는 것이다. URL 파라미터 방식으로 우회하면 깔끔하게 해결된다.

다음 편 예고: [홈랩 IaC 자동화 #4] Terraform으로 Proxmox VM 자동 생성하기


참고 링크


👉 #1화 — Docker Compose로 홈랩 자동화 플랫폼 구축하기
👉 #2화 — Ansible AWX로 Ubuntu 서버 6대 Playbook 실행하기
👉 #4화 — Terraform으로 Proxmox VM 자동 생성하기