Danh sách bài viết trong series Bashscript từ cơ bản đến áp dụng vào DevOps
- Bài 1. Cơ Bản Bash Script trong DevOps
- Bài 2. Điều Kiện trong Bash DevOps: Xử Lý Logic Cơ Bản
- Bài 3. Vòng Lặp trong Bash DevOps: Tự Động Hóa Lặp Lại Hiệu Quả
- Bài 4. Xử Lý File trong Bash DevOps: Đọc, Ghi và Quản Lý Hiệu Quả
- Bài 5. Text Processing trong Bash DevOps: Grep, Awk, Sed Hiệu Quả
- Bài 6. Function trong Bash DevOps: Tái Sử Dụng Code Hiệu Quả
- Bài 7. Quản Lý Biến và Môi Trường trong Bash DevOps
- Bài 8. Cron Job trong Bash DevOps: Tự Động Hóa Theo Lịch Hiệu Quả
- Bài 9. Debug trong Bash DevOps: Tìm và Sửa Lỗi Hiệu Quả
- Bài 10. Error Handling Bash DevOps: Xử Lý Ngoại Lệ Hiệu Quả
- Bài 11. Bash trong CI/CD DevOps: Tích Hợp Pipeline Hiệu Quả
- Bài 12. Quản Lý Hệ Thống với Bash DevOps: Theo Dõi và Can Thiệp Hiệu Quả
- Bài 13. Tự Động Hóa SSH với Bash DevOps: Quản Lý Multi-Server Hiệu Quả
- Bài 14. Bash và Docker trong DevOps: Quản Lý Container Hiệu Quả
- Bài 15. Monitoring với Bash DevOps: Báo Cáo Hệ Thống Hiệu Quả
- Bài 16. Bash Nâng Cao: Parallel Execution trong DevOps Hiệu Quả
- Bài 17. Bash và API trong DevOps: Gọi và Xử Lý API Hiệu Quả
- Bài 18. Bash và Cloud CLI trong DevOps: Quản Lý Cloud Hiệu Quả
- Bài 19. Bash và Security trong DevOps: Bảo Mật Script Hiệu Quả
- Bài 20. Best Practice trong Bash DevOps: Làm Chủ Script Hiệu Quả
Bash và API – Gọi và Xử Lý API trong DevOps
Trong DevOps, API là cầu nối để lấy dữ liệu, kiểm tra trạng thái, hay điều khiển hệ thống từ xa – và Bash có thể làm điều đó mà không cần ngôn ngữ phức tạp. Bash và API trong DevOps kết hợp gọi API Bash với curl
và xử lý JSON Bash để tự động hóa task quan trọng. Trong bài thứ mười bảy của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua cách dùng Bash để gọi API, xử lý dữ liệu, kèm thực hành thực tế. Đây là kinh nghiệm tôi áp dụng khi tích hợp API vào pipeline và monitoring, không chỉ là lý thuyết đâu nhé!
Tại Sao Bash và API?
API trong DevOps
API cung cấp thông tin hoặc điều khiển:
- Lấy trạng thái server từ tool monitoring.
- Kích hoạt pipeline qua webhook.
- Kiểm tra version ứng dụng.
Ví dụ: Script Bash gọi API GitLab để lấy commit mới nhất, thay vì check thủ công.
Lợi Ích trong DevOps
- Tự động hóa: Tích hợp hệ thống mà không cần GUI.
- Nhẹ nhàng:
curl
có sẵn, không cần cài thêm thư viện. - Pipeline: Dùng API để kiểm soát flow CI/CD.
Thực tế: Tôi từng dùng Bash gọi API Slack gửi alert, thay vì dựa vào tool nặng – setup mất 5 phút.
Công Cụ Bash với API
Curl Bash: Gọi API
curl
là công cụ chính để gọi API:
-
GET:
curl -s "https://api.example.com/status"
-s
: Ẩn progress.
-
POST:
curl -s -X POST -d '{"key":"value"}' -H "Content-Type: application/json" "https://api.example.com/data"
-
Header và Token:
curl -s -H "Authorization: Bearer xxx" "https://api.example.com/auth"
Xử Lý JSON Bash
Dùng jq
để parse JSON (cần cài: sudo apt install jq
):
-
Trích xuất giá trị:
echo '{"status":"ok","value":42}' | jq -r '.value'
- Kết quả:
42
.
- Kết quả:
-
Kiểm tra điều kiện:
STATUS=$(curl -s "https://api.example.com" | jq -r '.status') if [ "$STATUS" = "ok" ]; then echo "Good"; fi
Thực Hành: Script Lấy Dữ liệu API
Script Monitoring với API
Tạo api_monitor.sh
(dùng API công khai giả lập):
#!/bin/bash
set -e
trap 'echo "Lỗi tại dòng $LINENO: $BASH_COMMAND" >&2; exit 1' ERR
# Biến
API_URL="https://api.github.com/repos/xai-org/grok" # API GitHub công khai
LOG_FILE="/var/log/api_monitor.log"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
SLACK_WEBHOOK="https://hooks.slack.com/services/xxx/yyy/zzz" # Thay bằng webhook thật
# Hàm ghi log
log() {
echo "[$TIMESTAMP] $1" >> "$LOG_FILE" 2>/dev/null || {
echo "Không thể ghi log" >&2
exit 1
}
}
# Hàm gửi alert Slack
send_alert() {
curl -s -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"$1\"}" "$SLACK_WEBHOOK" >/dev/null 2>&1 || {
log "Lỗi gửi alert Slack"
}
}
# Hàm kiểm tra API
check_api() {
local RESPONSE=$(curl -s "$API_URL")
if [ -z "$RESPONSE" ]; then
log "Lỗi: Không gọi được API $API_URL"
send_alert "API $API_URL không phản hồi!"
exit 1
fi
local STARS=$(echo "$RESPONSE" | jq -r '.stargazers_count')
local NAME=$(echo "$RESPONSE" | jq -r '.name')
if [ "$STARS" -gt 1000 ]; then
log "Repo $NAME có $STARS sao - Nổi bật!"
send_alert "Repo $NAME vượt 1000 sao: $STARS"
else
log "Repo $NAME có $STARS sao"
fi
}
# Gọi hàm
check_api
echo "Kiểm tra API hoàn tất, xem log tại $LOG_FILE"
Chạy và Test
-
Cài đặt:
- Cài
jq
:sudo apt install jq
. - Thay
SLACK_WEBHOOK
nếu muốn gửi alert.
- Cài
-
Chạy script:
chmod +x api_monitor.sh ./api_monitor.sh
- Kết quả mẫu:
Kiểm tra API hoàn tất, xem log tại /var/log/api_monitor.log
- Log:
[2025-03-13 10:00:00] Repo grok có 1500 sao - Nổi bật!
- Slack (nếu setup): “Repo grok vượt 1000 sao: 1500”.
- Kết quả mẫu:
-
Mô phỏng lỗi:
- Thay
API_URL
thành URL sai:[2025-03-13 10:01:00] Lỗi: Không gọi được API https://api.wrong.com
- Thay
Giải thích:
curl -s
: Gọi API GitHub.jq -r
: Tríchstargazers_count
vàname
.send_alert
: Thông báo nếu repo nổi bật.
DevOps: Script này có thể dùng để theo dõi API trong cron hoặc pipeline.
Debug API Script
- Thêm debug:
echo "Debug: RESPONSE=$RESPONSE" >&2 bash -x api_monitor.sh
- Test API:
curl -s "$API_URL" | jq .
Thực tế: Tôi từng quên kiểm tra response rỗng, script crash – thêm điều kiện -z
khắc phục.
Ứng Dụng trong DevOps
Monitoring API
- Kiểm tra service:
STATUS=$(curl -s "https://myapp.com/health" | jq -r '.status') if [ "$STATUS" != "up" ]; then send_alert "Service down!"; fi
Pipeline CI/CD
- Trigger pipeline:
trigger: script: - curl -s -X POST -H "Authorization: Bearer $TOKEN" "$CI_API_URL"
Case study: Một team dùng Bash gọi API AWS để kiểm tra trạng thái EC2, tự động scale khi cần – giảm 50% thời gian phản ứng.
Best Practice
- Kiểm tra response trước khi parse.
- Lưu token trong biến môi trường.
- Dùng
jq
cho JSON phức tạp.
Kết Luận
Bash và API trong DevOps với gọi API Bash và xử lý JSON Bash là cách mạnh mẽ để tích hợp hệ thống qua curl Bash. Thực hành với api_monitor.sh
cho thấy bạn có thể tự động lấy dữ liệu API dễ dàng – kỹ năng quan trọng trong DevOps. Bài tiếp theo, chúng ta sẽ khám phá Bash và Cloud CLI – cách quản lý cloud như pro.