الدرس 1 من 12 · الأساسيات
Azure: الاشتراكات، مجموعات الموارد، المناطق، البوابة، Cloud Shell وaz CLI
الهدف
أن تفهم كيف يُنظَّم حساب Azure (من يدفع، من يدير، أين توجد الموارد)، وأن تختار منطقة (region) مناسبة لعميل مغربي، وأن تقوم بأولى عملياتك باستعمال البوابة (portal) وCloud Shell وaz CLI.
المفاهيم العامة (IaaS وPaaS وSaaS، نموذج المسؤولية المشتركة، CapEx وOpEx) مشروحة في مسار «Cloud» (الأساسيات). هنا نركّز على الطريقة التي يطبّقها بها Azure.
أهم النقاط
- كل شيء ينطلق من مستأجر (tenant) Microsoft Entra ID (دليل المؤسسة). يحتوي على اشتراكات (subscriptions)، وهي وحدة الفوترة والحدود (quotas).
- المورد (VM، قرص، قاعدة بيانات…) ينتمي دائمًا إلى مجموعة موارد (resource group) واحدة، وهي بدورها داخل اشتراك واحد.
- أربعة مستويات نطاق (scope) للصلاحيات والسياسات: مجموعة الإدارة ← الاشتراك ← مجموعة الموارد ← المورد. ما يُمنح في الأعلى يُورَث في الأسفل.
- لا توجد (بعد) منطقة Azure في المغرب: الأقرب هي France Central (
francecentral) وSpain Central (spaincentral) وWest Europe (westeurope). - az CLI أداة سطر أوامر متعددة الأنظمة؛ وCloud Shell يوفّرها لك متصلة مسبقًا، داخل المتصفح.
1. التسلسل الهرمي لحساب Azure
لنأخذ سلسلة متاجر في الدار البيضاء، «Boutique Atlas»، تنقل معلوماتيتها إلى Azure. في المخطّط التالي: المستأجر، ثم مجموعة الإدارة الجذرية، ثم مجموعتا إدارة («الإنتاج» و«خارج الإنتاج»)، وفي كل واحدة اشتراك (فاتورة واحدة وميزانية واحدة) يضم مجموعات موارد:
Locataire Entra ID : boutiqueatlas.ma
└── Groupe d'administration racine
├── GA « Production »
│ └── Abonnement « Boutique-Prod » ← une facture, un budget
│ ├── rg-boutique-prod ← le site web et sa base
│ └── rg-reseau-prod ← réseaux virtuels, VPN
└── GA « Hors-production »
└── Abonnement « Boutique-Dev »
└── rg-boutique-dev
| المستوى | الدور | مثال |
|---|---|---|
| المستأجر (tenant) | الدليل: المستخدمون، المجموعات، التطبيقات | boutiqueatlas.ma |
| مجموعة الإدارة (management group) | تجميع الاشتراكات لتطبيق الصلاحيات والسياسات عليها | «Production» |
| الاشتراك (subscription) | عقد فوترة، حصص (quotas)، حدود أمنية | «Boutique-Prod» |
| مجموعة الموارد (resource group) | مجلد منطقي لموارد تعيش وتُحذف معًا | rg-boutique-prod |
| المورد (resource) | العنصر المفوتر: VM، حساب تخزين، عنوان IP… | vm-web-01 |
قواعد يجب معرفتها:
- لمجموعة الموارد منطقة (حيث تُخزَّن بياناتها الوصفية metadata)، لكنها يمكن أن تحتوي على موارد من مناطق أخرى.
- حذف مجموعة موارد يحذف كل ما تحتويه. هذا عملي لبيئة الاختبار، وخطير في الإنتاج.
- يمكن نقل مورد من مجموعة إلى أخرى (أغلب الأنواع تسمح بذلك)، لكن لا يمكن التداخل: لا توجد مجموعة داخل مجموعة.
كم اشتراكًا؟
ممارسة شائعة: اشتراك لكل بيئة (الإنتاج، ما قبل الإنتاج، التطوير)، بل وأحيانًا لكل عميل بالنسبة لشركة خدمات رقمية (ESN). بهذا نفصل الفواتير والحصص والصلاحيات. وتجنّبنا مجموعات الإدارة تكرار القواعد نفسها على كل اشتراك.
2. المناطق ونطاقات التوفّر
المنطقة مجموعة من مراكز البيانات المتقاربة (مثلًا France Central، قرب باريس). كثير من المناطق تضم ثلاثة نطاقات توفّر (availability zones): مراكز بيانات منفصلة (تغذية كهربائية وتبريد وشبكة مستقلة) داخل المنطقة نفسها.
| اختيار المنطقة حسب… | ما يجب التحقق منه |
|---|---|
| زمن الاستجابة نحو المستخدمين في المغرب | إسبانيا وفرنسا هما الأقرب |
| توفّر الخدمة | ليست كل الخدمات متوفرة في كل المناطق |
| السعر | يختلف من منطقة إلى أخرى |
| المتطلبات القانونية | القانون 09-08 حول المعطيات الشخصية (رأي CNDP لبعض عمليات النقل) |
| النطاقات | منطقة بنطاقات تتيح التوفّر العالي (high availability) |
# عرض المناطق وأسمائها المختصرة
az account list-locations --output table
# أحجام VM المتاحة في منطقة
az vm list-sizes --location francecentral --output table
تنتظر الأوامر دائمًا الاسم المختصر (francecentral)، وليس أبدًا الاسم المعروض («France Central»).
3. بوابة Azure
البوابة (portal.azure.com) هي واجهة الويب. وهي ممتازة لـالاستكشاف والعرض المرئي (مخططات الشبكة، التكاليف، المقاييس) وإصلاح الأعطال. بعض المعالم:
- شريط البحث في الأعلى يجد خدمة أو موردًا أو وثيقة؛
- مجموعات الموارد: العرض «حسب المشروع»؛
- إدارة التكاليف + الفوترة: الميزانيات وتحليل التكاليف؛
- زر Cloud Shell (الأيقونة
>_) يفتح طرفية أسفل الصفحة.
لكن النقرة لا تُعاد. فبمجرد أن تحتاج عملية إلى التكرار (VM لكل عميل، بيئة لكل متدرّب)، ننتقل إلى سطر الأوامر ثم إلى البنية التحتية كشيفرة (infrastructure as code) (الدرس 3.3، Bicep).
4. Cloud Shell
Cloud Shell طرفية مصادَق عليها مسبقًا بحسابك، داخل المتصفح:
- بيئتان حسب الاختيار: Bash أو PowerShell؛
- az CLI وkubectl وgit وTerraform وأدوات أخرى مثبّتة مسبقًا؛
- الجلسة مؤقتة؛ وللاحتفاظ بملفاتك من جلسة إلى أخرى، يقترح عليك Cloud Shell ربط مشاركة ملفات (file share) في Azure (تخزين مفوتر، بضعة دراهم في الشهر).
إنها أسرع طريقة للبدء، من أي حاسوب، حتى من حاسوب في مقهى إنترنت لا تريد تثبيت أي شيء عليه.
5. az CLI على حاسوبك
يُثبَّت az CLI على Windows وmacOS وLinux (الحزمة azure-cli من مستودعات Microsoft). بعد ذلك:
az version # الإصدار المثبّت
az login # يفتح المتصفح لتسجيل الدخول
az login --use-device-code # على خادم دون متصفح: رمز يُدخَل في جهاز آخر
az account show --output table # الاشتراك المختار حاليًا
az account list --output table # كل اشتراكاتك
az account set --subscription "Boutique-Prod" # تغيير الاشتراك
شكل الأوامر
az <groupe> [sous-groupe] <action> --paramètres
az group create --name rg-boutique-prod --location francecentral
az network vnet create --name vnet-prod ...
az vm list --output table
(البنية: az ثم المجموعة ثم المجموعة الفرعية إن وُجدت ثم الإجراء ثم المعاملات.) يعرض az <groupe> --help الإجراءات الممكنة؛ ويقترح az find "créer une vm" أمثلة.
إنشاء مجموعة موارد وعرضها وحذفها
# إنشاء، مع وسوم (tags) لتتبّع التكاليف حسب المشروع
az group create --name rg-boutique-prod --location francecentral \
--tags env=prod projet=boutique
az group list --output table
az group show --name rg-boutique-prod
# حذف كل محتوى المجموعة (يطلب التأكيد)
az group delete --name rg-boutique-dev
az group delete --name rg-boutique-dev --yes --no-wait # دون سؤال، في الخلفية
الوسوم (--tags) أزواج مفتاح=قيمة. لا تغيّر شيئًا في طريقة العمل، لكنها تتيح ترشيح تحليل التكاليف («كم يكلّف مشروع boutique في الإنتاج؟»).
القيم الافتراضية
az configure --defaults group=rg-boutique-prod location=francecentral
az vm list --output table # يستعمل من الآن rg-boutique-prod
az configure --list-defaults # عرض القيم المسجّلة
عملي، لكنه خطير في سكربت مشترك: اجعل القيم صريحة في سكربتات الإنتاج.
صيغ الإخراج والاستعلامات
| الخيار | الإخراج | الاستعمال |
|---|---|---|
--output json (افتراضي) |
JSON كامل | السكربتات، الأدوات |
--output table |
جدول مقروء | قراءة بشرية |
--output tsv |
قيم خام مفصولة بعلامات جدولة | استرجاع قيمة في متغير |
--output yaml |
YAML | القراءة |
يرشّح الخيار --query النتيجة باستعمال صياغة JMESPath:
# فقط اسم ومنطقة كل مجموعة
az group list --query "[].{nom:name, region:location}" --output table
# مجموعات الإنتاج (الوسم env=prod)
az group list --query "[?tags.env=='prod'].name" --output tsv
# استرجاع معرّف مجموعة في متغير
ID=$(az group show --name rg-boutique-prod --query id --output tsv)
echo "$ID" # /subscriptions/<id-abonnement>/resourceGroups/rg-boutique-prod
هذا المعرّف الطويل (معرّف المورد resource ID) يتكرّر في كل مكان: يحدّد المورد دون أي لبس، ويُستعمل نطاقًا (scope) للصلاحيات (الدرس 1.2).
6. الأقفال: تجنّب الحذف غير المقصود
# منع الحذف (يبقى التعديل ممكنًا)
az lock create --name ne-pas-supprimer --resource-group rg-boutique-prod \
--lock-type CanNotDelete
# منع أي تعديل
az lock create --name lecture-seule --resource-group rg-archives --lock-type ReadOnly
az lock list --resource-group rg-boutique-prod --output table
az lock delete --name ne-pas-supprimer --resource-group rg-boutique-prod
ينطبق القفل حتى على مالك (owner) الاشتراك: يجب أولًا إزالة القفل من أجل الحذف. وهذا بالضبط هو الهدف.
7. التكاليف منذ اليوم الأول
- أنشئ ميزانية (budget) على الاشتراك (البوابة: Gestion des coûts → Budgets) مع تنبيه عند 50 % و80 % و100 %.
- الـVM التي أُوقفت من داخل النظام تبقى مفوترة؛ وحدها الـVM المحرَّرة (deallocated) (
az vm deallocate) لا تدفع ثمن الحوسبة (الدرس 1.3). - الأقراص وعناوين IP العمومية والنسخ الاحتياطية مفوترة حتى عندما تكون الـVM مطفأة.
- احذف مجموعات الاختبار:
az group deleteهو أفضل أداة للتوفير لديك.
أخطاء متكررة
- العمل في الاشتراك الخطأ: دائمًا
az account showقبل عملية مهمة، وaz account setفي بداية السكربت. - استعمال الاسم المعروض للمنطقة («France Central») بدل الاسم المختصر
francecentral. - وضع كل شيء في مجموعة موارد واحدة: لن تستطيع حذف بيئة الاختبار دون المخاطرة بالإنتاج.
- نسيان الوسوم: بعد ستة أشهر، لا أحد يعرف لأي مشروع تعود فاتورة بـ 4 000 درهم.
التطبيق العملي (Lab)
ستُعِدّ سكربت القاعدة (socle) لـ Boutique Atlas: اختيار الاشتراك، وإنشاء مجموعة موارد الإنتاج في France Central مع وسومها، والقيم الافتراضية، والقفل. لا يتوفّر التمرين على شبكة ولا على az CLI: تكتب السكربت تمامًا كما كنت ستشغّله في Cloud Shell، ثم ملفًا صغيرًا يلخّص تسلسل النطاقات.
cat /root/azure/01-socle.sh # إعادة قراءة السكربت
sh -n /root/azure/01-socle.sh # التحقق من صياغة shell دون تنفيذه
اختبار قصير
- ما وحدة الفوترة في Azure؟
- هل يمكن لمورد أن ينتمي إلى مجموعتي موارد؟
- ماذا يحدث عند حذف مجموعة موارد؟
- أي خيار في az CLI يعطي قيمة خامًا، سهلة الوضع في متغير shell؟
- هل يستطيع مالك الاشتراك حذف مجموعة عليها قفل
CanNotDelete؟
الأجوبة
- الاشتراك (فاتورة واحدة، حصص، حدود للصلاحيات).
- لا: المورد في مجموعة واحدة فقط في الوقت نفسه (ويمكن نقله).
- تُحذف كل الموارد التي تحتويها.
--output tsv(غالبًا مع--query).- لا، ما دام القفل موجودًا: يجب عليه أولًا حذفه (
az lock delete).
مصادر مرجعية: Microsoft Learn (CC BY 4.0) — وثائق Azure RBAC والآلات الافتراضية والشبكات الافتراضية. نص أصلي من MasterLinux.