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à Cloud CLI – Quản Lý Cloud trong DevOps
Trong DevOps, cloud là nền tảng chính để chạy ứng dụng, và việc quản lý nó thủ công qua giao diện web là không khả thi khi quy mô lớn. Bash và Cloud CLI trong DevOps kết hợp Bash với AWS CLI Bash (hoặc CLI của cloud khác) để quản lý cloud Bash và tự động hóa cloud Bash một cách hiệu quả. Trong bài thứ mười tám của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua cách dùng Bash với AWS CLI, kèm thực hành thực tế. Đây là kinh nghiệm tôi áp dụng khi quản lý cụm EC2, không chỉ là lý thuyết đâu nhé!
Tại Sao Bash và Cloud CLI?
Cloud CLI trong DevOps
Cloud CLI (như AWS CLI, GCP CLI, Azure CLI) cho phép:
- Khởi động/tắt instance.
- Kiểm tra trạng thái tài nguyên.
- Deploy ứng dụng từ terminal.
Ví dụ: Script Bash dùng AWS CLI để kiểm tra EC2 đang chạy, thay vì vào AWS Console.
Lợi Ích trong DevOps
- Tự động hóa: Quản lý hàng trăm instance bằng script.
- Tích hợp: Dùng trong pipeline CI/CD (bài 11).
- Nhanh chóng: Gọi lệnh thay vì click chuột.
Thực tế: Tôi từng dùng Bash và AWS CLI để restart 10 instance cùng lúc, tiết kiệm 30 phút so với làm thủ công.
Công Cụ Bash với Cloud CLI
AWS CLI Cơ Bản
-
Cài đặt:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install
-
Cấu hình:
aws configure
- Nhập Access Key, Secret Key, Region.
-
Ví dụ lệnh:
- Liệt kê instance:
aws ec2 describe-instances
- Khởi động instance:
aws ec2 start-instances --instance-ids i-1234567890abcdef0
- Liệt kê instance:
Kết Hợp với Bash
-
Lọc output JSON (dùng
jq
– bài 17):aws ec2 describe-instances | jq -r '.Reservations[].Instances[].InstanceId'
-
Điều kiện:
STATUS=$(aws ec2 describe-instances --instance-ids i-1234567890abcdef0 | jq -r '.Reservations[].Instances[].State.Name') if [ "$STATUS" = "running" ]; then echo "OK"; fi
Thực Hành: Script Kiểm Tra Instance
Script Quản Lý EC2
Tạo cloud_manager.sh
:
#!/bin/bash
set -e
trap 'echo "Lỗi tại dòng $LINENO: $BASH_COMMAND" >&2; exit 1' ERR
# Biến
LOG_FILE="/var/log/cloud_manager.log"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
INSTANCE_IDS=("i-1234567890abcdef0" "i-0987654321fedcba0") # Thay bằng ID thật
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 instance
check_instance() {
local INSTANCE=$1
local STATUS=$(aws ec2 describe-instances --instance-ids "$INSTANCE" | jq -r '.Reservations[].Instances[].State.Name' 2>/dev/null)
if [ -z "$STATUS" ]; then
log "Lỗi: Không lấy được trạng thái $INSTANCE"
send_alert "Instance $INSTANCE không phản hồi!"
return 1
fi
if [ "$STATUS" != "running" ]; then
log "Cảnh báo: $INSTANCE đang $STATUS"
echo "Khởi động $INSTANCE..."
aws ec2 start-instances --instance-ids "$INSTANCE" >/dev/null 2>&1
log "Đã yêu cầu khởi động $INSTANCE"
send_alert "Instance $INSTANCE ($STATUS) đang được khởi động"
else
log "Instance $INSTANCE đang chạy"
fi
}
# Lặp qua instance
for INSTANCE in "${INSTANCE_IDS[@]}"
do
check_instance "$INSTANCE"
done
echo "Kiểm tra cloud hoàn tất, xem log tại $LOG_FILE"
Chuẩn Bị và Chạy
-
Cài đặt:
- Cài AWS CLI và
jq
:sudo apt install jq aws configure
- Thay
INSTANCE_IDS
bằng ID thật từ AWS.
- Cài AWS CLI và
-
Chạy script:
chmod +x cloud_manager.sh ./cloud_manager.sh
- Kết quả mẫu:
Kiểm tra cloud hoàn tất, xem log tại /var/log/cloud_manager.log
- Log:
[2025-03-13 10:00:00] Instance i-1234567890abcdef0 đang chạy [2025-03-13 10:00:00] Cảnh báo: i-0987654321fedcba0 đang stopped [2025-03-13 10:00:00] Đã yêu cầu khởi động i-0987654321fedcba0
- Kết quả mẫu:
Giải thích:
aws ec2 describe-instances
: Lấy trạng thái.jq -r
: TríchState.Name
.aws ec2 start-instances
: Khởi động nếu dừng.
DevOps: Script này giám sát EC2, tự động can thiệp, có thể chạy qua cron.
Debug Cloud Script
- Thêm debug:
log "Debug: STATUS=$STATUS" bash -x cloud_manager.sh
- Test lệnh:
aws ec2 describe-instances --instance-ids i-1234567890abcdef0 | jq .
Thực tế: Tôi từng quên kiểm tra lỗi AWS CLI, script fail im lặng – thêm 2>/dev/null
và điều kiện khắc phục.
Ứng Dụng trong DevOps
Tự Động Hóa Cloud
- Tắt instance nhàn rỗi:
aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | select(.State.Name == "running") | .InstanceId' | xargs -I {} aws ec2 stop-instances --instance-ids {}
Pipeline CI/CD
- Deploy lên EC2:
deploy: script: - bash cloud_manager.sh - aws ec2 run-instances --image-id ami-12345678 --count 1
Case study: Một team dùng Bash và AWS CLI tự động scale EC2 khi CPU cao, giảm 40% chi phí – không cần Lambda.
Best Practice
- Lưu credential trong
~/.aws/credentials
. - Kiểm tra trạng thái trước khi can thiệp.
- Dùng parallel (bài 16) cho multi-instance.
Kết Luận
Bash và Cloud CLI trong DevOps với AWS CLI Bash là cách mạnh mẽ để quản lý cloud Bash và tự động hóa cloud Bash. Thực hành với cloud_manager.sh
cho thấy bạn có thể giám sát và can thiệp cloud 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à Security – cách bảo mật script như pro.