تمرين - أضِف منطقًا شرطيًا إلى قالب ARM خاصتك
في التدريبات السابقة، كنت تعمل مع الأجهزة الظاهرية التي تعمل بنظام Linux. هنا، يمكنك تناول الموضوع من زاوية مختلفة قليلًا والتركيز على إدارة حسابات التخزين.
لنفترض أن لديك ثلاث بيئات تحتاج إلى توزيعها: تطوير وتقسيم مرحلي وتشغيل.
- بيئة التطوير هي المكان الأول الذي يجتمع فيه كل ما يحتاجه تطبيقك معًا. قد تتضمن هذه البيئة خوادم ويب و موازنة التحميل وقاعدة بيانات.
- بيئة التقسيم المرحلي هي المكان الذي يحدث فيه الاختبار النهائي قبل إصدار ميزات التطبيق الجديدة للمستخدمين النهائيين.
- بيئة التشغيل هي المكان الذي يصل فيه المستخدمون إلى تطبيقك.
أثناء الانتقال من التطوير إلى التشغيل، تحتاج إلى بنية أساسية إضافية. على سبيل المثال، في التشغيل، تحتاج إلى حساب تخزين إضافي لا تحتاجه في البيئات السابقة.
هنا، يمكنك استخدام شرطًا للتحكم عند تقديم حساب تخزين. يتيح لك إجراء ذلك دعم كلٍ من بيئات البنية الأساسية خاصتك من قالب ARM نفسه.
إنشاء قالب ARM
هنا، تنشئ قالب Azure Resource Manager (ARM) الذي يحدد مورد حساب التخزين.
كما يعرّف القالب معلمتين:
environment
: اسم البيئة الحالية.storageAccountName
: اسم حساب التخزين.
environment
يمكن أن يكون لها واحدة من ثلاث قيم: dev
، staging
، أو production
. يزود الشرط حساب التخزين فقط عندما environment
يساوي production
.
في Visual Studio Code، أنشئ ملفًا بالاسم condition.jsonفي الدليل نفسه الذي يحتوي على azuredeploy.json.
أضِف هذه المحتويات إلى condition.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "environment": { "type": "string", "defaultValue": "dev", "allowedValues": [ "dev", "staging", "production" ], "metadata": { "description": "a value that represents the current environment" } }, "storageAccountName": { "type": "string", "metadata": { "description": "a name for the account" } } }, "functions": [], "variables": {}, "resources": [ { "condition": "[equals(parameters('environment'),'production')]", "name": "[parameters('storageAccountName')]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "tags": { "displayName": "[parameters('storageAccountName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" } } ], "outputs": {} }
هنا سوف تقوم بتوزيع قالب ARM، مع بناء condition، باستخدام PowerShell وحدة Az.
إتاحة بيئة التطوير
هنا، يمكنك توزيع قالب ARM في بيئة التطوير. يمكنك إجراء ذلك عن طريق تعيين معلمة القالب environment
إلى dev
.
لأن الشرط يزود حساب التخزين فقط عندما environment
يساوي production
، تتوقع ألا يزود القالب حساب التخزين. بمعنى آخر، تتوقع عملية توزيع لا تحتوي على أي موارد.
إنشاء متغيّر PowerShell يحمل اسم حساب التخزين.
$STORAGE_ACCT_NAME="tailwindsa"+ (Get-Random -COUNT 1 -Maximum 9999999 )
يجب أن تكون أسماء حسابات التخزين مميزة. يضمن الجزء
Get-Random
أن ينتهي حساب التخزين بسلسلة عشوائية من الأرقام.شغَّل الأمر
New-AzResourceGroupDeployment
التالي لتوزيع القالب إلى بيئة التطوير:New-AzResourceGroupDeployment ` -TemplateFile "./condition.json" ` -storageAccountName $STORAGE_ACCT_NAME ` -environment dev
تحقق من التوزيع إلى بيئة التطوير
تذكر، أنت تتوقع أن القالب لم يزود حساب التخزين.
للتحقق من هذه الحقيقة، يمكنك تشغيل الأمر Get-AzStorageAccount
للتحقق مما إذا كان اسم حساب التخزين قيد الاستخدام بالفعل.
شغَّل الأمر Get-AzStorageAccount
:
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
تشبه مخرجاتك ما يلي:
Get-AzStorageAccount: The Resource 'Microsoft.Storage/storageAccounts/tailwindsa4736629' under resource group '<rgn>name of resource group</rgn>' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix
هذا يخبرك أن حساب التخزين لم يُزوَد بعد. تتوقع هذا لأنك لم تقم بالتوزيع بعد إلى بيئة التشغيل.
تزويد بيئة التشغيل
هنا، يتم توزيع قالب ARM إلى بيئة التشغيل، على غرار ما فعلته مع بيئة التطوير.
لتجديد المعلومات، إليك ما يبدو عليه الشرط في قالبك:
"condition": "[equals(parameters('environment'),'production')]"
لتشغيل هذا الشرط، يمكنك تعيين معلمة القالب environment
إلى production
.
شغَّل الأمر New-AzResourceGroupDeployment
التالي لتوزيع القالب إلى بيئة التشغيل:
New-AzResourceGroupDeployment `
-TemplateFile "./condition.json" `
-storageAccountName $STORAGE_ACCT_NAME `
-environment production
التحقق من التوزيع إلى بيئة التشغيل
هذه المرة، تتوقع أن يكون القالب قد زود حساب التخزين.
للتحقق من هذه الحقيقة، يمكنك إعادة تشغيل الأمر Get-AzStorageAccount
للتحقق من أن اسم حساب التخزين قيد الاستخدام.
شغّل الأمر Get-AzStorageAccount
التالي:
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
هذه المرة ستحصل على مُخرجات مختلفة. بدلًا من ظهور رسالة خطأ، فإنه يظهر هذا الجدول المُخرج والذي يعرض معلومات عن مورد حساب التخزين خاصتك:
تشبه مخرجاتك ما يلي:
Location Name Type Kind
-------- ---- ---- ----
westus tailwindsa4736629 Microsoft.Storage/storageAccounts StorageV2
تخبرك هذه القيم أنه قد جرى تزويد حساب التخزين على النحو الذي تتوقعه.
على الرغم من أن هذا مثال أساسي، إلا أنك ترى كيفية التوزيع بناءً على الشرط.
من الناحية العملية، فإن بيئات التطوير والتقسيم المرحلي والتشغيل خاصتك تحتوي على موارد Azure إضافية لدعم احتياجات الحساب والشبكات والتخزين خاصتك. من المحتمل أن تُدار كل بيئة من خلال مجموعة الموارد خاصتها بحيث يمكن تزويدها ومعالجتها باعتبارها وحدة واحدة.
إنشاء قالب ARM
هنا، تنشئ قالب Azure Resource Manager (ARM) الذي يحدد مورد حساب التخزين.
كما يعرّف القالب معلمتين:
environment
: اسم البيئة الحالية.storageAccountName
: اسم حساب التخزين.
environment
يمكن أن يكون لها واحدة من ثلاث قيم: dev
، staging
، أو production
. يزود الشرط حساب التخزين فقط عندما environment
يساوي production
.
في Visual Studio Code، أنشئ ملفًا بالاسم condition.jsonفي الدليل نفسه الذي يحتوي على azuredeploy.json.
أضِف هذه المحتويات إلى condition.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "environment": { "type": "string", "defaultValue": "dev", "allowedValues": [ "dev", "staging", "production" ], "metadata": { "description": "a value that represents the current environment" } }, "storageAccountName": { "type": "string", "metadata": { "description": "a name for the account" } } }, "functions": [], "variables": {}, "resources": [ { "condition": "[equals(parameters('environment'),'production')]", "name": "[parameters('storageAccountName')]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "tags": { "displayName": "[parameters('storageAccountName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" } } ], "outputs": {} }
إتاحة بيئة التطوير
هنا، يمكنك توزيع قالب ARM في بيئة التطوير. يمكنك إجراء ذلك عن طريق تعيين معلمة القالب environment
إلى dev
.
لأن الشرط يزود حساب التخزين فقط عندما environment
يساوي production
، تتوقع ألا يزود القالب حساب التخزين. بمعنى آخر، تتوقع عملية توزيع لا تحتوي على أي موارد.
إنشاء متغيّر Bash يحمل اسم حساب التخزين.
STORAGE_ACCT_NAME=tailwindsa$RANDOM
يجب أن تكون أسماء حسابات التخزين مميزة. يضمن الجزء
$RANDOM
أن ينتهي حساب التخزين بسلسلة عشوائية من الأرقام.شغَّل الأمر
az deployment group create
التالي لتوزيع القالب إلى بيئة التطوير:az deployment group create \ --template-file condition.json \ --parameters storageAccountName=$STORAGE_ACCT_NAME environment=dev
تحقق من التوزيع إلى بيئة التطوير
تذكر، أنت تتوقع أن القالب لم يزود حساب التخزين.
للتحقق من هذه الحقيقة، يمكنك تشغيل الأمر az storage account check-name
للتحقق مما إذا كان اسم حساب التخزين قيد الاستخدام بالفعل.
شغّل الأمر az storage account check-name
التالي:
az storage account check-name --name $STORAGE_ACCT_NAME
ترى ذلك:
{
"message": null,
"nameAvailable": true,
"reason": null
}
القيمة بالنسبة لـ nameAvailable
هي true
، مما يعني أن اسم حساب التخزين ما زال متاحًا ولم يُزود بعد. تتوقع هذا لأنك لم تقم بالتوزيع بعد إلى بيئة التشغيل.
تزويد بيئة التشغيل
هنا، يتم توزيع قالب ARM إلى بيئة التشغيل، على غرار ما فعلته مع بيئة التطوير.
لتجديد المعلومات، إليك ما يبدو عليه الشرط في قالبك:
"condition": "[equals(parameters('environment'),'production')]"
لتشغيل هذا الشرط، يمكنك تعيين معلمة القالب environment
إلى production
.
شغَّل الأمر az deployment group create
التالي لتوزيع القالب إلى بيئة التشغيل:
az deployment group create \
--template-file condition.json \
--parameters storageAccountName=$STORAGE_ACCT_NAME environment=production
التحقق من التوزيع إلى بيئة التشغيل
هذه المرة، تتوقع أن يكون القالب قد زود حساب التخزين.
للتحقق من هذه الحقيقة، يمكنك إعادة تشغيل الأمر az storage account check-name
للتحقق من أن اسم حساب التخزين قيد الاستخدام.
شغّل الأمر az storage account check-name
التالي:
az storage account check-name --name $STORAGE_ACCT_NAME
تشبه مخرجاتك ما يلي:
{
"message": "The storage account named tailwindsa32100 is already taken.",
"nameAvailable": false,
"reason": "AlreadyExists"
}
تخبرك هذه القيم أنه قد جرى تزويد حساب التخزين على النحو الذي تتوقعه.
على الرغم من أن هذا مثال أساسي، إلا أنك ترى كيفية التوزيع بناءً على الشرط.
من الناحية العملية، فإن بيئات التطوير والتقسيم المرحلي والتشغيل خاصتك تحتوي على موارد Azure إضافية لدعم احتياجات الحساب والشبكات والتخزين خاصتك. من المحتمل أن تُدار كل بيئة من خلال مجموعة الموارد خاصتها بحيث يمكن تزويدها ومعالجتها باعتبارها وحدة واحدة.