Bài 17. Bash và API trong DevOps: Gọi và Xử Lý API 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 curlxử 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:

  1. GET:

    curl -s "https://api.example.com/status"
    • -s: Ẩn progress.
  2. POST:

    curl -s -X POST -d '{"key":"value"}' -H "Content-Type: application/json" "https://api.example.com/data"
  3. 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):

  1. Trích xuất giá trị:

    echo '{"status":"ok","value":42}' | jq -r '.value'
    • Kết quả: 42.
  2. 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

  1. Cài đặt:

    • Cài jq: sudo apt install jq.
    • Thay SLACK_WEBHOOK nếu muốn gửi alert.
  2. 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”.
  3. 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

Giải thích:

  • curl -s: Gọi API GitHub.
  • jq -r: Trích stargazers_countname.
  • 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 Bashxử 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.

Điều hướng chuỗi bài viết<< Bài 16. Bash Nâng Cao: Parallel Execution trong DevOps Hiệu Quả
>> Bài 18. Bash và Cloud CLI trong DevOps: Quản Lý Cloud Hiệu Quả
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Có thể bạn quan tâm