AWS EC2 인스턴스 상태를 Discord 채널에서 실시간으로 조회할 수 있는 슬래시 명령어 기반 클라우드 어시스턴트 봇입니다.
Discord API와 AWS SDK(Boto3)를 활용하여 간편한 인프라 모니터링을 자동화합니다.
무료 플랜으로 연습하던 중 뒤늦게 비용이 발생한 것을 확인하고 눈물을 훔쳤습니다.
그래서 비용 청구 상태를 디스코드에서 바로 확인하고 싶었습니다.
Slack은 무겁고, 브라우저는 번거롭고, 디스코드가 열려 있길래 봇으로 만들었습니다.
/setup: AWS Access Key, Secret Key, Region 선택 → 안전하게 암호화되어 저장/status: 현재 연결된 AWS 계정의 전체 리소스 상태 조회/account: 현재 연결된 AWS 계정 조회/bill: 현재 연결된 AWS 계정의 비용 청구 상태 조회/region: 현재 설정된 region/지역 조회 및 업데이트/private: 이후 메세지를 "나만보기" 함/public: 이후 메세지를 "전체공개" 함
- 본 프로젝트는
MVC + Command Handler 패턴을 기반으로 명확한 역할 분리를 통해 유지보수성과 확장성을 높였습니다.
| 구분 | 내용 |
|---|---|
| 언어 | Python 3.11+ |
| Discord API | discord.py (v2.3+) |
| AWS SDK | boto3 |
| 환경 관리 | python-dotenv |
| 암호화 | cryptography.fernet |
cloud-bill-bot/
├── bot.py ← 엔트리 포인트 (봇 초기화, 명령어 등록)
├── app/
│ ├── commands/ ← 명령어 핸들러
│ │ ├── setup_handler.py
│ │ ├── region_handler.py
│ │ ├── status_handler.py
│ │ ├── bill_handler.py
│ │ └── ...
│ ├── services/ ← 실제 도메인 로직
│ │ ├── setup_service.py
│ │ ├── region_service.py
│ │ ├── status_service.py
│ │ ├── bill_service.py
│ │ └── ec2_service.py
├── interface/
│ ├── views/ ← Modal, View, Select 등 UI 요소
│ │ ├── setup_view.py
│ │ └── region_view.py
│ ├── setup_command.py
│ ├── region_command.py
│ ├── status_command.py
│ ├── bill_command.py
│ └── ...
├── infra/
│ ├── aws_client_factory.py
│ ├── memory_config.py
│ ├── crypto.py
│ └── user_config.py
├── config/ ← Guild/유저별 키 저장소
├── encryption_key.key
├── .env
├── requirements.txt
└── README.md
---
## 🚧 향후 확장 계획
- [x] EC2 외 S3, RDS, Billing 등 자원 감시 확장
- [x] 나만보기/전체공개 설정 추가
- [x] /ec2start, /ec2stop 명령어 추가
- [ ] 생성형 QnA 도우미 추가
- [ ] CloudWatch 알림 연동 (일정 금액 초과시 자동 채널 알림 연동)
- [ ] 비용 분포도 표시 기능 검토
---
## ⚠️ 주의사항
- `.env`, `encryption_key.key`, `config/` 내 JSON 파일은 Git에 커밋하지 마세요
- 봇은 Discord 서버별로, 유저별로 정보를 분리하여 관리합니다