Trong bài viết trước, chúng ta đã tìm hiểu cách gọi REST API với curl và jq. Bây giờ, chúng ta sẽ áp dụng kỹ năng đó vào cloud — nơi Bash kết hợp với Cloud CLI để quản lý tài nguyên trên AWS, GCP, Azure một cách tự động và hiệu quả.
Khi quản lý cloud ở quy mô lớn, click chuột trên web console không còn khả thi. Cloud CLI cho phép bạn khởi động/tắt instance, kiểm tra trạng thái, snapshot, scale — tất cả từ terminal. Và Bash là “glue” để kết nối các CLI tools này thành automation scripts mạnh mẽ.
Bài viết này sẽ hướng dẫn bạn cách thiết lập và sử dụng AWS CLI, GCP CLI, Azure CLI trong Bash, query JSON output, và xây dựng script quản lý cloud thực tế.
Cloud CLI overview
Tại sao dùng Cloud CLI?
Phương pháp
Ưu điểm
Nhược điểm
Web Console
Trực quan, dễ dùng
Chậm, không tự động được
Cloud CLI
Nhanh, scriptable, tự động
Cần học syntax từng cloud
API trực tiếp
Linh hoạt nhất
Phức tạp, phải xử lý auth手动
Cloud CLI là sweet spot — đủ mạnh để tự động hóa, đủ đơn giản để học nhanh. Và Bash là công cụ hoàn hảo để orchestrate nhiều CLI tools.
#!/usr/bin/env bash
# Tự động scale GCP instance group khi CPU > 80%set -euo pipefail
PROJECT="${GCP_PROJECT:-my-project}"ZONE="${GCP_ZONE:-asia-southeast1-a}"INSTANCE_GROUP="${INSTANCE_GROUP:-web-server-group}"CPU_THRESHOLD=80# Lấy CPU utilizationCPU_USAGE=$(gcloud monitoring time-series list \
--filter='metric.type="compute.googleapis.com/instance/cpu/utilization"'\
--interval-start-time="-PT5M"\
--format="value(points[0].value.doubleValue)" 2>/dev/null | head -1 ||echo"0")# Convert to percentageCPU_PERCENT=$(echo"$CPU_USAGE * 100"| bc 2>/dev/null | cut -d. -f1 ||echo"0")echo"Current CPU: ${CPU_PERCENT}%"if(( CPU_PERCENT > CPU_THRESHOLD ));thenecho"CPU above threshold, scaling up..." gcloud instance-groups managed set-autoscaling "$INSTANCE_GROUP"\
--zone="$ZONE"\
--project="$PROJECT"\
--min-num-replicas=2\
--max-num-replicas=10\
--target-cpu-utilization=0.7
elseecho"CPU normal, no action needed"fi
Stop all VMs sau giờ làm việc (Azure)
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env bash
# Tắt tất cả VMs trong resource group (dùng cho dev/test environment)set -euo pipefail
RESOURCE_GROUP="${1:?Usage: $0 <resource-group>}"echo"Stopping all VMs in resource group: $RESOURCE_GROUP"az vm stop --resource-group "$RESOURCE_GROUP" --no-wait
echo"Stop command sent. Check status with:"echo" az vm list -g $RESOURCE_GROUP --query '[].{name:name, state:powerState}' --output table"
Multi-cloud script pattern
Khi quản lý nhiều cloud, важно abstraction layer để script không bị lock-in:
Security: Luôn lưu credentials trong profile files (~/.aws/credentials, ~/.config/gcloud/, ~/.azure/), không hardcode trong script. Dùng IAM roles/service accounts khi có thể.
Rate limiting: Cloud APIs có rate limits. AWS: 100-200 requests/second, GCP: varies, Azure: varies. Add sleep hoặc retry logic khi gọi API密集.
Cost awareness: Một số API calls có phí (như describe-instances trên AWS). Monitor AWS Cost Explorer hoặc equivalent để tránh bất ngờ.
Error handling: Cloud CLI có thể fail vì nhiều lý do (network, permission, throttle). Luôn check exit code và log chi tiết.
Parallel execution: Khi quản lý nhiều resources, dùng parallel execution để tăng tốc, nhưng cẩn thận rate limit.
Lời kết
Bash và Cloud CLI là combination cực kỳ mạnh mẽ trong DevOps. Từ việc query JSON output với jq, tự động hóa snapshot/scale, đến multi-cloud management — tất cả đều có thể thực hiện chỉ với Bash script.
Với pattern vendor-neutral như trên, bạn có thể viết scripts chạy trên bất kỳ cloud provider nào mà không bị lock-in.
Ở bài tiếp theo, chúng ta sẽ khám phá Bash và Security: cách bảo mật script, validate input, manage secrets, và scan với shellcheck.