إطلاق VMs Azure (Windows Server 2022 + Ubuntu 24.04)، اختيار SKU، إرفاق Managed Disks، NSG، Public IP، Bastion Host، snapshots، Availability Sets مقابل Availability Zones، scale sets (VMSS).
للسياق: الدليل الرئيسي Azure AZ-104 · Tenant Azure مجّاني.
المقدّمة
VMs Azure (Virtual Machines) هي خدمة IaaS المرجعيّة. AZ-104 يختبر نشرها، إعدادها، scaling، و HA. هذا الدرس يبني الكفاءة الكاملة.
المتطلّبات
- Tenant Azure مُهيَّأ (راجع الدرس السابق).
- Azure CLI شغّال.
- المستوى المتوسّط.
- الوقت: ساعتان.
الخطوة 1 — VM SKU والأنواع
Series A : مستوى ابتدائي، dev/test
Series B : burstable (اقتصادي لـ workloads متغيّرة)
Series D : general purpose، متوازن
Series E : memory optimized
Series F : compute optimized
Series M : massive memory (حتى 12 To RAM)
Series N : GPU (NV لـ graphics، NC/ND لـ ML)
Series H : HPC
Free Tier: B1s (1 vCPU، 1 Go RAM، ~750h/شهر مجّاني لمدّة 12 شهراً).
في الاختبار: اختر SKU حسب السيناريو. تطبيق ويب قياسيّ = D2s_v3. DB في الذاكرة = E. ML training = ND.
الخطوة 2 — إطلاق VM Linux
# Resource Group
az group create --name lab-vm --location francecentral
# إنشاء VM Ubuntu 24.04 مع SSH key مُولَّد آلياً
az vm create \
--resource-group lab-vm \
--name ubuntu-vm \
--image Ubuntu2404 \
--size Standard_B1s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku Standard \
--nsg-rule SSH
# IP عامّة مُرتجَعة
PUBLIC_IP=$(az vm show --resource-group lab-vm --name ubuntu-vm --show-details --query publicIps -o tsv)
ssh azureuser@$PUBLIC_IP
# على الـ VM
sudo apt update && sudo apt install -y nginx
sudo systemctl enable --now nginx
echo "<h1>Hello Azure</h1>" | sudo tee /var/www/html/index.html
# فتح port 80 NSG
az vm open-port --resource-group lab-vm --name ubuntu-vm --port 80
زر http://$PUBLIC_IP — صفحة ويب مُقدَّمة.
الخطوة 3 — إطلاق VM Windows Server
az vm create \
--resource-group lab-vm \
--name win-vm \
--image Win2022Datacenter \
--size Standard_B2ms \
--admin-username winadmin \
--admin-password "ComplexPwd2026!" \
--public-ip-sku Standard \
--nsg-rule RDP
# RDP من Windows Remote Desktop client
az vm show --resource-group lab-vm --name win-vm --show-details --query publicIps -o tsv
# اتّصل بـ mstsc.exe
⚠️ VMs Windows أغلى (B2ms ~30 USD/شهر كحدّ أدنى، ليست Free Tier). أوقفها عند عدم الاستعمال.
الخطوة 4 — Managed Disks
Azure managed disks = مكافئ EBS AWS. 4 أنواع:
Standard HDD : مغناطيسيّ، الأرخص، dev/test
Standard SSD : SSD مدخل، web servers low traffic
Premium SSD v1 : أداء عالٍ، prod
Premium SSD v2 : جيل جديد، حتى 80K IOPS
Ultra Disk : disk أداء فائق، حتى 160K IOPS
# إنشاء disk إضافيّ وإرفاقه
az disk create --resource-group lab-vm --name datadisk1 --size-gb 100 --sku Premium_LRS
az vm disk attach --resource-group lab-vm --vm-name ubuntu-vm --name datadisk1
# على الـ VM، formater
sudo lsblk
sudo mkfs.ext4 /dev/sdc
sudo mkdir /mnt/data
sudo mount /dev/sdc /mnt/data
التشفير at-rest: Azure Disk Encryption (BitLocker لـ Windows، dm-crypt لـ Linux)، أو Server-Side Encryption with Customer-Managed Keys.
الخطوة 5 — NSG: Network Security Group
NSG = مكافئ Security Group AWS. Stateful، allow rules.
# إنشاء NSG
az network nsg create --resource-group lab-vm --name lab-nsg
# قواعد
az network nsg rule create --resource-group lab-vm --nsg-name lab-nsg --name AllowHTTP \
--priority 100 --direction Inbound --access Allow --protocol Tcp --destination-port-ranges 80
az network nsg rule create --resource-group lab-vm --nsg-name lab-nsg --name AllowSSH \
--priority 110 --direction Inbound --access Allow --protocol Tcp --destination-port-ranges 22 \
--source-address-prefixes 203.0.113.0/24
# الإرفاق بـ subnet أو NIC لـ VM
في الاختبار: NSG مُرفَق بـ subnet و NIC = قواعد مُقَيَّمة على الاثنين. الأولويّة 100-4096. Default deny inbound، allow outbound.
الخطوة 6 — Bastion Host (تأمين SSH/RDP)
Bastion = وصول SSH/RDP عبر بوّابة ويب دون كشف port 22/3389 عامّاً.
# إنشاء subnet AzureBastionSubnet (اسم إلزاميّ)
az network vnet subnet create --resource-group lab-vm --vnet-name lab-vnet --name AzureBastionSubnet --address-prefix 10.0.10.0/26
# Public IP لـ Bastion
az network public-ip create --resource-group lab-vm --name bastion-pip --sku Standard
# Bastion (~140 USD/شهر — ليست Free Tier)
az network bastion create --resource-group lab-vm --name lab-bastion --public-ip-address bastion-pip --vnet-name lab-vnet --sku Basic
لـ lab: فضّل Bastion Developer (مجّاني، اتّصال متزامن واحد، صالح للتعلّم).
في الاختبار: Bastion = best practice للوصول الإداريّ. لا Public IP على VMs حسّاسة، الوصول عبر Bastion فقط.
الخطوة 7 — Snapshots و images
# Snapshot لـ disk OS
az snapshot create --resource-group lab-vm --name ubuntu-snap-1 --source $(az vm show -g lab-vm -n ubuntu-vm --query "storageProfile.osDisk.managedDisk.id" -o tsv)
# إنشاء image مُخصَّصة من VM
az vm deallocate --resource-group lab-vm --name ubuntu-vm
az vm generalize --resource-group lab-vm --name ubuntu-vm
az image create --resource-group lab-vm --name ubuntu-baseline-image --source ubuntu-vm
# إطلاق VM جديدة من image
az vm create --resource-group lab-vm --name ubuntu-vm-2 --image ubuntu-baseline-image --size Standard_B1s --admin-username azureuser --generate-ssh-keys
⚠️ vm generalize يجعل الـ VM المصدر غير قابلة للاستعمال — افعلها دائماً على VM template، لا على VM في prod.
الخطوة 8 — Availability Sets مقابل Availability Zones
Availability Sets : مجموعة VMs على racks/UPS مختلفة في نفس datacenter
SLA 99.95% (multi-VM)
Fault domains (2-3) + Update domains (5-20)
Availability Zones : مجموعة VMs على datacenters مفصولة فيزيائياً (multi-AZ)
SLA 99.99% (multi-VM مع AZ مختلف)
متاحة في بعض المناطق (France Central نعم)
في الاختبار: AZ > AS لـ مرونة. استعمل AZ في كلّ مكان متاح، fallback AS إذا المنطقة بلا AZ.
# VMs في 3 AZs مختلفة
az vm create -g lab-vm -n web-01 --image Ubuntu2404 --size Standard_B1s --zone 1 --generate-ssh-keys
az vm create -g lab-vm -n web-02 --image Ubuntu2404 --size Standard_B1s --zone 2 --generate-ssh-keys
az vm create -g lab-vm -n web-03 --image Ubuntu2404 --size Standard_B1s --zone 3 --generate-ssh-keys
الخطوة 9 — VM Scale Sets (VMSS)
VMSS = مكافئ Auto Scaling Group AWS. يُوفّر N VMs متطابقة، autoscale حسب metrics.
az vmss create \
--resource-group lab-vm \
--name web-vmss \
--image Ubuntu2404 \
--instance-count 3 \
--vm-sku Standard_B1s \
--upgrade-policy-mode automatic \
--admin-username azureuser \
--generate-ssh-keys \
--zones 1 2 3
# Scale آليّ على CPU
az monitor autoscale create \
--resource-group lab-vm --resource web-vmss --resource-type Microsoft.Compute/virtualMachineScaleSets \
--name autoscale-web --min-count 2 --max-count 10 --count 3
az monitor autoscale rule create \
--resource-group lab-vm --autoscale-name autoscale-web \
--condition "Percentage CPU > 70 avg 5m" --scale out 2
az monitor autoscale rule create \
--resource-group lab-vm --autoscale-name autoscale-web \
--condition "Percentage CPU < 30 avg 5m" --scale in 1
الخطوة 10 — Cleanup إلزاميّ
# إيقاف وحذف VMs
az vm deallocate --resource-group lab-vm --name ubuntu-vm
az group delete --name lab-vm --yes --no-wait
الأخطاء المتكرّرة
| الخطأ | الحلّ |
|---|---|
| VM Windows فاتورة مفاجئة | B2ms ~30 USD/شهر، استعمل stop/deallocate عند عدم الاستعمال |
| SSH timeout | NSG، public IP، route table |
| Bastion ~140 USD/شهر | للـ lab استعمل Bastion Developer مجّاني |
| Disk encryption غير مُفعَّل | تفعيل عند الإنشاء، صعب لاحقاً |
| VM في AS بدلاً من AZ | AZ أفضل لـ HA، فضّله في المناطق المُدَعَّمة |
تعديلات للسياق الإقليميّ
الشركات الناشئة: B1s/B2s مع stop آليّ ليلاً = توفير 60%. VMSS للذروة فقط.
ESN: قوالب Bicep لـ VM standardisées (NSG، Bastion، AZ) = نشر سريع للعملاء.
البنوك: VMs في 3 AZs + Premium SSD v2 + Azure Disk Encryption + AD DS managed.
أسئلة شائعة
كم وقت لإنشاء VM؟ 1-3 دقائق Linux، 3-5 دقائق Windows.
هل يمكن تغيير SKU في running؟ لا، Stop ← Resize ← Start.
Bastion أم VPN؟ Bastion لإدارة، VPN للتطبيقات.
للتعمّق
- الدليل الرئيسي: Azure AZ-104
- التتمّة: شبكة Azure الافتراضيّة.
- التوثيق: Azure VM docs.
الكلمات المفتاحيّة: Azure VM، Managed Disks، NSG، Bastion Host، Availability Zones، VMSS Scale Sets، Premium SSD v2، snapshots Azure.
تعميق
Fintech داكار: VMSS web-vmss في 3 AZs + ALB + Aurora Serverless. تكلفة 300-500 USD/شهر مع scale آليّ.
ESN أبيدجان: Bicep templates مع VM Image Builder لـ images مُخصَّصة. النشر < 10 دقائق.
بنك إقليميّ: VMs في 3 AZs + Premium SSD v2 + Azure Disk Encryption + Azure Backup + Defender for Servers Plan 2.
خطّة مهنة
0-12 شهراً: junior 800K-1.1M FCFA. 12-30: AZ-500 1.4M-2M. 30-60: AZ-305 architect 2.5M-4M. 60+: senior 400-800 USD/يوم.
أدوات تكميليّة
Bicep، Terraform، Azure DevOps، GitHub Actions، Azure Monitor، Microsoft Sentinel، Defender for Cloud، Azure Policy، Update Manager.