Hiểu về Azure Subscriptions và Resource Groups dưới góc nhìn DevOps
Trong hành trình làm việc với Microsoft Azure, hai khái niệm cơ bản nhưng quan trọng nhất mà bất kỳ kỹ sư DevOps nào cũng cần nắm vững chính là Subscription và Resource Group. Đây là nền tảng để bạn triển khai, quản lý và tối ưu hệ thống hạ tầng trên Azure.
1. Azure Subscription là gì?
Subscription là một ranh giới quản lý tài nguyên trong Azure, gắn liền trực tiếp với billing (hóa đơn) và quota (giới hạn tài nguyên). Tất cả các tài nguyên bạn tạo ra (VM, AKS, Storage, Database, Network, …) đều phải nằm trong một Subscription.
Đặc điểm chính:
Gắn với hóa đơn: mỗi Subscription có chi phí riêng.
Có quota riêng: ví dụ số lượng vCPU, số lượng IP Public, dung lượng storage tối đa.
Hỗ trợ RBAC (Role-Based Access Control): phân quyền cho người dùng hoặc nhóm cụ thể.
Ví dụ thực tế:
Một công ty thường sẽ có nhiều Subscription khác nhau:
Production Subscription: chứa toàn bộ tài nguyên phục vụ khách hàng thật.
Staging/UAT Subscription: phục vụ kiểm thử, QA.
Development Subscription: nơi DevOps và Developer thử nghiệm.
Việc tách này giúp tránh rủi ro triển khai nhầm và dễ dàng quản lý chi phí.
2. Azure Resource Group là gì?
Resource Group (RG) là một container logic để nhóm các tài nguyên trong một Subscription. Mỗi tài nguyên chỉ thuộc về một Resource Group duy nhất, nhưng một Resource Group có thể chứa nhiều loại tài nguyên khác nhau.
Đặc điểm chính:
Quản lý vòng đời: xóa RG sẽ xóa toàn bộ tài nguyên bên trong.
RBAC: có thể phân quyền cho từng RG.
Chi phí: gắn tags vào RG để dễ dàng theo dõi chi phí theo team hoặc project.
Triển khai: IaC (Terraform/Bicep/ARM/Pulumi) có thể target trực tiếp vào một RG.
Ví dụ thực tế:
Trong Subscription "Production", bạn có thể có:
RG networking-prod → chứa VNet, Subnet, Load Balancer.
RG app-frontend-prod → chứa App Service, Storage, CDN.
RG app-backend-prod → chứa AKS, Database, Key Vault.
Việc phân chia theo logic ứng dụng và domain giúp quản lý dễ dàng và rõ ràng hơn.
3. Mối quan hệ Subscription ↔ Resource Group ↔ Resource
Hãy hình dung theo sơ đồ sau:
Azure Active Directory Tenant (Công ty bạn)
│
├── Subscription 1: "Production"
│ │
│ ├── Resource Group: "networking-prod"
│ │ ├── Virtual Network (VNet)
│ │ ├── Subnet
│ │ └── Load Balancer
│ │
│ ├── Resource Group: "app-frontend-prod"
│ │ ├── App Service (Web App)
│ │ ├── Storage Account (Blob/Static files)
│ │ └── CDN Profile
│ │
│ └── Resource Group: "app-backend-prod"
│ ├── AKS Cluster
│ ├── Azure SQL Database
│ └── Key Vault
│
├── Subscription 2: "Staging/UAT"
│ │
│ ├── Resource Group: "staging-app"
│ │ ├── App Service (Web App)
│ │ └── Azure SQL Database
│ │
│ └── Resource Group: "staging-network"
│ └── Virtual Network
│
└── Subscription 3: "Development"
│
└── Resource Group: "dev-playground"
├── VM Test
├── Storage Account
└── Container Registry
4. Best Practices cho DevOps
Tách Subscription theo môi trường (Dev, Test, Prod).
Chia Resource Group theo logic ứng dụng hoặc domain.
Sử dụng tags để quản lý chi phí:
environment=prod,owner=team-data, …RBAC rõ ràng: DevOps có quyền Contributor ở Dev, Ops có quyền Owner ở Prod.
Automation-first: luôn tạo RG và resources bằng Terraform/Bicep/Pulumi thay vì thủ công.