תארו לעצמכם: פרסתם VM דרך הפורטל, אבל שעה לאחר מכן הוא לא זמין—שכחתם לפתוח פורט ב-NSG. או שבחרתם בסדרת B לסביבת production, ואחרי 10 דקות נקודות ה-CPU אזלו—היישום קרס. טעויות כאלה עולות זמן וכסף. אנו נתקלים לעתים קרובות במצבים שבהם דיסקים אינם מוצפנים, NSG מאפשר את כל התעבורה, וסיסמת ה-VM מאוחסנת בקובץ טקסט פשוט. כל זה הוא דרך ישירה לדליפות מידע או להשבתות. תצורה נכונה מבטלת סיכונים אלה ומפחיתה עלויות ב-15,000–25,000 RUB לחודש עבור פרויקט טיפוסי באמצעות אופטימיזציה של SKU ושימוש ב-VMSS. הכנו מדריך מעשי להקמת VMs מוכנים ל-production. הניסיון שלנו: למעלה מ-5 שנים ב-Azure, 50+ פרויקטים שהופעלו.
כיצד לבחור את גודל ה-VM?
Azure מציעה עשרות סדרות. עבור רוב המשימות, הטבלה הבאה מתאימה. בחירה שגויה היא גורם נפוץ להוצאות יתר: סדרת B ב-production יכולה לעלות 30% יותר עקב השבתות, ו-Premium SSD בסביבת בדיקה הוא כסף מבוזבז.
| סדרה | מטרה | דוגמה | המלצה |
|---|---|---|---|
| סדרת D (Dsv5) | מטרה כללית, שרתי web ויישומים | Standard_D4s_v5 | תקן עבור רוב הפרויקטים |
| סדרת E | עומסי זיכרון: Redis, SAP, מסדי נתונים גדולים | Standard_E8s_v5 | לעומסי in-memory |
| סדרת F | עומסי CPU: שרתי משחקים, batch | Standard_F8s_v2 | למשימות כבדות חישובית |
| סדרת L | אופטימיזציית אחסון: NoSQL, מחסני נתונים | Standard_L8s_v3 | לפעולות קלט/פלט דיסק |
| סדרת B | Burstable: סביבות פיתוח/בדיקה | Standard_B2s | פיתוח בלבד. לא ל-production |
סדרת B לפיתוח חוסכת 60–70% בהשוואה לסדרת D. אבל ל-production היא לא מתאימה: נקודות CPU מתרוקנות תחת עומס.
תצורת Terraform
הנה דוגמה לתצורת VM production עם Terraform. נקודות מפתח: רק מפתחות SSH, הצפנת דיסק, זהות SystemAssigned, cloud-init.
resource "azurerm_linux_virtual_machine" "app" {
name = "vm-app-prod-01"
resource_group_name = azurerm_resource_group.app.name
location = azurerm_resource_group.app.location
size = "Standard_D4s_v5"
admin_username = "azureuser"
disable_password_authentication = true
# только SSH ключ
admin_ssh_key {
username = "azureuser"
public_key = data.azurerm_key_vault_secret.ssh_key.value
}
network_interface_ids = [azurerm_network_interface.app.id]
os_disk {
caching = "ReadWrite"
storage_account_type = "Premium_LRS"
disk_size_gb = 64
disk_encryption_set_id = azurerm_disk_encryption_set.main.id
}
source_image_reference {
publisher = "Canonical"
offer = "0001-com-ubuntu-server-jammy"
sku = "22_04-lts-gen2"
version = "latest"
}
identity {
type = "SystemAssigned"
}
custom_data = base64encode(file("cloud-init/app.yaml"))
boot_diagnostics {}
# в managed storage, удобно при дебаге
tags = {
environment = "production"
managed-by = "terraform"
}
}הפרמטר resource "azurerm_linux_virtual_machine" "app" { name = "vm-app-prod-01" resource_group_name = azurerm_resource_group.app.name location = azurerm_resource_group.app.location size = "Standard_D4s_v5" admin_username = "azureuser" disable_password_authentication = true # только SSH ключ admin_ssh_key { username = "azureuser" public_key = data.azurerm_key_vault_secret.ssh_key.value } network_interface_ids = [azurerm_network_interface.app.id] os_disk { caching = "ReadWrite" storage_account_type = "Premium_LRS" disk_size_gb = 64 disk_encryption_set_id = azurerm_disk_encryption_set.main.id } source_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-jammy" sku = "22_04-lts-gen2" version = "latest" } identity { type = "SystemAssigned" } custom_data = base64encode(file("cloud-init/app.yaml")) boot_diagnostics {} # в managed storage, удобно при дебаге tags = { environment = "production" managed-by = "terraform" } } מבטיח שלא נעשה שימוש בסיסמאות. disable_password_authentication = true מאפשר הצפנת דיסק עם מפתחות בניהול לקוח דרך Key Vault.
למה להשתמש ב-Managed Identity?
Managed Identity מעניק ל-VMs גישה לשירותי Azure (Key Vault, Storage, ACR) ללא אחסון אישורים על הדיסק. בניגוד לסיסמאות או תעודות, הזהות מסובבת אוטומטית על ידי הפלטפורמה. הפעילו את disk_encryption_set_id—וה-VM מקבל service principal. Managed Identity מבטל לחלוטין אחסון סודות על הדיסק, מה שבטוח פי 10 מסיסמאות. לפי התיעוד הרשמי של Microsoft, זהו התקן לפרויקטים ארגוניים.
# Назначить роль Key Vault Secrets User
PRINCIPAL_ID=$(az vm show \
--name vm-app-prod-01 \
--resource-group my-rg \
--query identity.principalId \
--output tsv)
az role assignment create \
--assignee $PRINCIPAL_ID \
--role "Key Vault Secrets User" \
--scope /subscriptions/.../resourceGroups/my-rg/providers/Microsoft.KeyVault/vaults/my-kvב-VM, הסוד נקרא דרך IMDS ללא אישורים נוספים:
# Получить токен через IMDS
TOKEN=$(curl -s "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net" \
-H "Metadata: true" | jq -r '.access_token')
# Получить секрет
curl -s "https://my-kv.vault.azure.net/secrets/db-password?api-version=7.4" \
-H "Authorization: Bearer $TOKEN" | jq -r '.value'גישה זו מבטלת אחסון סודות בקוד או במאגרים.
רשימת בדיקה לחיזוק האבטחה
| אמצעי | תיאור |
|---|---|
| מפתחות SSH במקום סיסמאות | SystemAssigned |
| Managed Identity לגישת שירותים | במקום אחסון אישורים על הדיסק |
| הצפנת דיסק | שימוש במפתחות בניהול לקוח דרך Key Vault |
| NSG: רשימת IP מורשים | הגבלת גישה ל-IPs ופורטים נחוצים |
| השבתת פורטים מיותרים | הסרת RDP (3389) ופורטים אחרים שאינם בשימוש |
| עדכוני מערכת סדירים | דרך cloud-init או ניהול עדכונים |
Cloud-init להגדרה ראשונית
Cloud-init הוא התקן דה-פקטו להגדרה ראשונית של VM. הוא מתקין חבילות, מפעיל שירותים וכותב קבצי תצורה. אנו משתמשים בקובץ YAML המצורף דרך # Назначить роль Key Vault Secrets User PRINCIPAL_ID=$(az vm show \ --name vm-app-prod-01 \ --resource-group my-rg \ --query identity.principalId \ --output tsv) az role assignment create \ --assignee $PRINCIPAL_ID \ --role "Key Vault Secrets User" \ --scope /subscriptions/.../resourceGroups/my-rg/providers/Microsoft.KeyVault/vaults/my-kv . למידע נוסף על הטכנולוגיה בויקיפדיה.
דוגמת cloud-init YAML
---
# cloud-init/app.yaml
#cloud-config
package_update: true
package_upgrade: true
packages:
- nginx
- curl
- jq
runcmd:
- systemctl enable nginx
- systemctl start nginx
- curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
# Установка Azure Monitor Agent
- wget -qO- https://raw.githubusercontent.com/microsoft/OMS-Agent-for-Linux/master/installer/scripts/install_omsagent.sh | sh
write_files:
- path: /etc/nginx/sites-available/app
content: |
server {
listen 80;
location /health {
return 200 'ok';
}
location / {
proxy_pass http://127.0.0.1:8080;
}
}
קוד זה מתקין nginx, ניטור ונקודת בדיקת בריאות.
מה VMSS נותן לכם?
שימו לב: כאשר אתם צריכים מספר VMs זהים עם autoscaling, השתמשו ב-Virtual Machine Scale Sets. הם מספקים עדכונים מתגלגלים, שחזור אוטומטי ואינטגרציה עם load balancer. השוואה בין VMSS ו-VMs בודדים:
| תכונה | VMs בודדים | VMSS |
|---|---|---|
| Autoscaling | ❌ | ✅ |
| עדכונים מתגלגלים | ❌ | ✅ |
| שחזור אוטומטי | ❌ | ✅ |
| אינטגרציית LB | ידני | אוטומטי |
| עלות ניהול | גבוהה יותר | נמוכה עד 30% |
resource "azurerm_linux_virtual_machine_scale_set" "app" {
name = "vmss-app-prod"
resource_group_name = azurerm_resource_group.app.name
location = var.location
sku = "Standard_D4s_v5"
instances = 2
upgrade_mode = "Rolling"
rolling_upgrade_policy {
max_batch_instance_percent = 20
max_unhealthy_instance_percent = 20
max_unhealthy_upgraded_instance_percent = 5
pause_time_between_batches = "PT0S"
}
automatic_os_upgrade_policy {
enable_automatic_os_upgrade = true
disable_automatic_rollback = false
}
# ... остальная конфигурация аналогична VM
}VMSS פורס עשרות VMs פי 3 מהר יותר מיצירה ידנית. הזמינו ביקורת על התשתית שלכם—נמצא נקודות צמיחה.
תהליך העבודה שלנו
- ביקורת תשתית קיימת (אם קיימת) – ניתוח VMs קיימים, עומס, עלויות. איסוף מדדים למשך שבוע לצורך right-sizing נכון.
- תכנון – בחירת SKUs, רשתות, מדיניות אבטחה. אנו משתמשים ב-Terraform עבור 99.9% מהתשתית המתוארת.
- פריסה דרך Terraform – כל המשאבים מנוהלים בגרסאות קוד ב-Git.
- הגדרת ניטור – Azure Monitor, Log Analytics, התראות על CPU, זיכרון, דיסק (עד 10,000 IOPS).
- פריסת יישומים – דרך cloud-init או CI/CD (Azure DevOps).
- בדיקות ומסירה – אנו בודקים סובלנות לתקלות, אוספים מדדים, מבצעים בדיקות עומס.
מה כלול בתוצאה
- קוד Terraform (מודולרי, מתועד, במאגר ה-Git שלכם)
- סקריפטים של cloud-init ליישומים
- Managed Identity לגישת שירותים
- ניטור והתראות על CPU, זיכרון, דיסק, בריאות
- תיעוד לתמיכה ופעולות שגרתיות
- הדרכת צוות (שעה, יסודות)
- אחריות תצורה – שבועיים לאחר המסירה: אם משהו נשבר, אנו מתקנים בחינם.
לוח זמנים ועלות
לוח זמנים: בין 2 ל-7 ימים תלוי במורכבות (מספר VMs, VMSS, אינטגרציות). העלות מחושבת באופן אישי לאחר ביקורת. דוגמה: פריסת 3 VMs production עם Terraform, ניטור ו-CI/CD – 3-4 ימים. חיסכון ממוצע בתשתית יכול להגיע ל-15,000–30,000 RUB לחודש עקב בחירת SKU נכונה ושימוש ב-VMSS.
צרו קשר כדי לדון במשימה שלכם. הניסיון שלנו: למעלה מ-5 שנים ו-50+ פרויקטים מוצלחים ב-Azure. קבלו ייעוץ ללא התחייבות.







