التشغيل السريع: إحضار التخزين الخاص بك لإنشاء تعريف تطبيق مدار من Azure ونشره
يوفر هذا التشغيل السريع مقدمة لإحضار التخزين الخاص بك (BYOS) لتطبيق Azure المدار. يمكنك إنشاء تعريف تطبيق مدار ونشره في كتالوج الخدمة لأعضاء مؤسستك. عند استخدام حساب التخزين الخاص بك، يمكن أن يتجاوز تعريف التطبيق المدار حد 120 ميغابايت لكتالوج الخدمة.
لنشر تعريف تطبيق مدار إلى كتالوج الخدمة، قم بالمهام التالية:
- إنشاء قالب Azure Resource Manager (قالب ARM) الذي يحدد موارد Azure التي تم نشرها بواسطة التطبيق المدار.
- تعريف عناصر واجهة المستخدم للمدخل عند نشر التطبيق المدار.
- إنشاء حزمة .zip تحتوي على ملفات JSON المطلوبة.
- إنشاء حساب تخزين حيث تقوم بتخزين تعريف التطبيق المدار.
- انشر تعريف التطبيق المدار إلى حساب التخزين الخاص بك بحيث يكون متوفرا في كتالوج الخدمة.
إذا كان تعريف التطبيق المدار أقل من 120 ميغابايت ولا تريد استخدام حساب التخزين الخاص بك، فانتقل إلى التشغيل السريع: إنشاء تعريف تطبيق مدار من Azure ونشره.
يمكنك استخدام Bicep لتطوير تعريف تطبيق مدار ولكن يجب تحويله إلى قالب ARM JSON قبل أن تتمكن من نشر التعريف في Azure. لمزيد من المعلومات، انتقل إلى التشغيل السريع: استخدم Bicep لإنشاء تعريف تطبيق مدار من Azure ونشره.
يمكنك أيضا استخدام Bicep لنشر تعريف تطبيق مدار من كتالوج الخدمة. لمزيد من المعلومات، انتقل إلى التشغيل السريع: استخدم Bicep لنشر تعريف تطبيق Azure المدار.
المتطلبات الأساسية
لاستكمال هذا التشغيل السريع، ستحتاج إلى العناصر التالية:
- حساب Azure مع اشتراك نشط وأذونات لموارد Microsoft Entra مثل المستخدمين أو المجموعات أو أساسيات الخدمة. إذا لم يكن لديك حساب، فأنشئ حسابا مجانيا قبل أن تبدأ.
- التعليمة البرمجية Visual Studio مع أحدث ملحق Resource Manager Tools. بالنسبة لملفات Bicep، قم بتثبيت ملحق Bicep ل Visual Studio Code.
- تثبيت أحدث إصدار من Azure PowerShell أو Azure CLI.
إنشاء قالب ARM
يتضمن كل تعريف تطبيق مدار ملفا يسمى mainTemplate.json. يحدد القالب موارد Azure المراد نشرها ولا يختلف عن قالب ARM العادي.
افتح Visual Studio Code، وأنشئ ملفا يحمل الاسم الحساس لحالة الأحرف mainTemplate.json واحفظه.
إضافة JSON التالي وحفظ الملف. وهو يحدد موارد التطبيق المدار لنشر App Service وخطة App Service وحساب تخزين.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"appServicePlanName": {
"type": "string",
"maxLength": 40,
"metadata": {
"description": "App Service plan name."
}
},
"appServiceNamePrefix": {
"type": "string",
"maxLength": 47,
"metadata": {
"description": "App Service name prefix."
}
}
},
"variables": {
"appServicePlanSku": "B1",
"appServicePlanCapacity": 1,
"appServiceName": "[format('{0}{1}', parameters('appServiceNamePrefix'), uniqueString(resourceGroup().id))]",
"linuxFxVersion": "DOTNETCORE|8.0"
},
"resources": [
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2023-01-01",
"name": "[parameters('appServicePlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('appServicePlanSku')]",
"capacity": "[variables('appServicePlanCapacity')]"
},
"kind": "linux",
"properties": {
"zoneRedundant": false,
"reserved": true
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2023-01-01",
"name": "[variables('appServiceName')]",
"location": "[parameters('location')]",
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
"httpsOnly": true,
"redundancyMode": "None",
"siteConfig": {
"linuxFxVersion": "[variables('linuxFxVersion')]",
"minTlsVersion": "1.2",
"ftpsState": "Disabled"
}
},
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]"
]
}
],
"outputs": {
"appServicePlan": {
"type": "string",
"value": "[parameters('appServicePlanName')]"
},
"appServiceApp": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Web/sites', variables('appServiceName')), '2023-01-01').defaultHostName]"
}
}
}
تحديد تجربة المدخل
بصفتك ناشرا، يمكنك تحديد تجربة المدخل لإنشاء التطبيق المدار. ينشئ ملف createUiDefinition.json واجهة مستخدم المدخل. يمكنك تحديد كيفية توفير المستخدمين الإدخال لكل معلمة باستخدام عناصر التحكم مثل القوائم المنسدلة ومربعات النص.
في هذا المثال، تطالبك واجهة المستخدم بإدخال بادئة اسم App Service واسم خطة App Service. أثناء نشر mainTemplate.json appServiceName
تستخدم المتغيرات الدالة uniqueString
لإلحاق سلسلة مكونة من 13 حرفا ببادئة الاسم بحيث يكون الاسم فريدا عالميا عبر Azure.
افتح Visual Studio Code، وأنشئ ملفا يحمل الاسم الحساس لحالة الأحرف createUiDefinition.json واحفظه.
أضف التعليمة البرمجية JSON التالية إلى الملف واحفظه.
{
"$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
"handler": "Microsoft.Azure.CreateUIDef",
"version": "0.1.2-preview",
"parameters": {
"basics": [
{}
],
"steps": [
{
"name": "webAppSettings",
"label": "Web App settings",
"subLabel": {
"preValidation": "Configure the web app settings",
"postValidation": "Completed"
},
"elements": [
{
"name": "appServicePlanName",
"type": "Microsoft.Common.TextBox",
"label": "App Service plan name",
"placeholder": "App Service plan name",
"defaultValue": "",
"toolTip": "Use alphanumeric characters or hyphens with a maximum of 40 characters.",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z-]{1,40}$",
"validationMessage": "Only alphanumeric characters or hyphens are allowed, with a maximum of 40 characters."
},
"visible": true
},
{
"name": "appServiceName",
"type": "Microsoft.Common.TextBox",
"label": "App Service name prefix",
"placeholder": "App Service name prefix",
"defaultValue": "",
"toolTip": "Use alphanumeric characters or hyphens with minimum of 2 characters and maximum of 47 characters.",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z-]{2,47}$",
"validationMessage": "Only alphanumeric characters or hyphens are allowed, with a minimum of 2 characters and maximum of 47 characters."
},
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"appServicePlanName": "[steps('webAppSettings').appServicePlanName]",
"appServiceNamePrefix": "[steps('webAppSettings').appServiceName]"
}
}
}
لمعرفة المزيد، انتقل إلى بدء استخدام CreateUiDefinition.
حزم الملفات
أضف الملفين إلى ملف حزمة يسمى app.zip. يجب أن يكون الملفان في المستوى الجذر لملف .zip . إذا كانت الملفات موجودة في مجلد، عند إنشاء تعريف التطبيق المدار، تتلقى خطأ يفيد بأن الملفات المطلوبة غير موجودة.
قم بتحميل app.zip إلى حساب تخزين Azure حتى تتمكن من استخدامه عند نشر تعريف التطبيق المدار. يجب أن يكون اسم حساب التخزين فريدا عموميا عبر Azure ويجب أن يكون الطول من 3 إلى 24 حرفا بأحرف صغيرة وأرقام فقط. في الأمر ، استبدل العنصر النائب <pkgstorageaccountname>
بما في ذلك أقواس الزاوية (<>
)، باسم حساب التخزين الفريد الخاص بك.
New-AzResourceGroup -Name packageStorageGroup -Location westus
$pkgstorageparms = @{
ResourceGroupName = "packageStorageGroup"
Name = "<pkgstorageaccountname>"
Location = "westus"
SkuName = "Standard_LRS"
Kind = "StorageV2"
MinimumTlsVersion = "TLS1_2"
AllowBlobPublicAccess = $true
AllowSharedKeyAccess = $false
}
$pkgstorageaccount = New-AzStorageAccount @pkgstorageparms
$pkgstorageparms
يستخدم المتغير تجميل PowerShell لتحسين قابلية القراءة لقيم المعلمات المستخدمة في الأمر لإنشاء حساب التخزين الجديد. يتم استخدام Splatting في أوامر PowerShell الأخرى التي تستخدم قيم معلمات متعددة.
بعد إنشاء حساب التخزين، أضف تعيين الدور Storage Blob Data Contributor إلى نطاق حساب التخزين. تعيين الوصول إلى حساب مستخدم Microsoft Entra الخاص بك. اعتمادا على مستوى الوصول في Azure، قد تحتاج إلى أذونات أخرى يعينها المسؤول. لمزيد من المعلومات، راجع تعيين دور Azure للوصول إلى بيانات الكائن الثنائي كبير الحجم وتعيين أدوار Azure باستخدام مدخل Microsoft Azure.
بعد إضافة الدور إلى حساب التخزين، يستغرق الأمر بضع دقائق لتصبح نشطا في Azure. يمكنك بعد ذلك إنشاء السياق المطلوب لإنشاء الحاوية وتحميل الملف.
$pkgstoragecontext = New-AzStorageContext -StorageAccountName $pkgstorageaccount.StorageAccountName -UseConnectedAccount
New-AzStorageContainer -Name appcontainer -Context $pkgstoragecontext -Permission blob
$blobparms = @{
File = "app.zip"
Container = "appcontainer"
Blob = "app.zip"
Context = $pkgstoragecontext
}
Set-AzStorageBlobContent @blobparms
استخدم الأمر التالي لتخزين URI لملف الحزمة في متغير يسمى packageuri
. يمكنك استخدام قيمة المتغير عند نشر تعريف التطبيق المدار.
$packageuri=(Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $pkgstoragecontext).ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri
استحضر سعة التخزين لتعريف التطبيق المدار
يمكنك تخزين تعريف التطبيق المدار في حساب التخزين الخاص بك بحيث يمكن إدارة موقعه والوصول إليه من قبلك لتلبية الاحتياجات التنظيمية لمؤسستك. يتيح لك استخدام حساب التخزين الخاص بك الحصول على تطبيق يتجاوز حد 120 ميغابايت لتعريف التطبيق المدار لكتالوج الخدمة.
إشعار
يُدعم توفير سعة التخزين فقط عند استخدام قالب ARM أو عمليات نشر واجهة برمجة تطبيقات REST API لتعريف التطبيق المدار.
إنشاء حساب التخزين
إنشاء حساب التخزين لتعريف التطبيق المدار. يجب أن يكون اسم حساب التخزين فريدا عموميا عبر Azure ويجب أن يكون الطول من 3 إلى 24 حرفا بأحرف صغيرة وأرقام فقط.
ينشئ هذا المثال مجموعة موارد جديدة باسم byosDefinitionStorageGroup
. في الأمر ، استبدل العنصر النائب <byosaccountname>
بما في ذلك أقواس الزاوية (<>
)، باسم حساب التخزين الفريد الخاص بك.
New-AzResourceGroup -Name byosDefinitionStorageGroup -Location westus
$byostorageparms = @{
ResourceGroupName = "byosDefinitionStorageGroup"
Name = "<byosaccountname>"
Location = "westus"
SkuName = "Standard_LRS"
Kind = "StorageV2"
MinimumTlsVersion = "TLS1_2"
AllowBlobPublicAccess = $true
AllowSharedKeyAccess = $true
}
$byosstorageaccount = New-AzStorageAccount @byostorageparms
بعد إنشاء حساب التخزين، أضف تعيين الدور Storage Blob Data Contributor إلى نطاق حساب التخزين. تعيين الوصول إلى حساب مستخدم Microsoft Entra الخاص بك. تحتاج إلى الوصول لخطوة لاحقة في العملية.
بعد إضافة الدور إلى حساب التخزين، يستغرق الأمر بضع دقائق لتصبح نشطا في Azure. يمكنك بعد ذلك إنشاء السياق المطلوب لإنشاء الحاوية وتحميل الملف.
$byosstoragecontext = New-AzStorageContext -StorageAccountName $byosstorageaccount.StorageAccountName -UseConnectedAccount
استخدم الأمر التالي لتخزين معرّف مورد حساب التخزين في متغير يسمى byosstorageid
. يمكنك استخدام قيمة المتغير عند نشر تعريف التطبيق المدار.
$byosstorageid = (Get-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName).Id
عيّن تعيين الدور إلى حساب التخزين لديك
قبل نشر تعريف التطبيق المدار إلى حساب التخزين الخاص بك، قم بتعيين دور المساهم إلى مستخدم موفر موارد الأجهزة في نطاق حساب التخزين. يتيح هذا التعيين ملفات تعريف كتابة الهوية إلى حاوية حساب التخزين.
يمكنك استخدام المتغيرات لإعداد تعيين الدور. يستخدم هذا المثال المتغير الذي $byosstorageid
قمت بإنشائه في الخطوة السابقة وينشئ $arpid
المتغير.
$arpid = (Get-AzADServicePrincipal -SearchString "Appliance Resource Provider").Id
New-AzRoleAssignment -ObjectId $arpid -RoleDefinitionName Contributor -Scope $byosstorageid
موفر موارد الأجهزة هو كيان خدمة في مستأجر Microsoft Entra. من مدخل Microsoft Azure، يمكنك التحقق مما إذا كان مسجلا بالانتقال إلى تطبيقات Microsoft Entra ID>Enterprise وتغيير عامل تصفية البحث إلى تطبيقات Microsoft. ابحث عن Appliance Resource Provider. إذا لم يتم العثور عليه، فسجل Microsoft.Solutions
موفر الموارد.
الحصول على معرف المجموعة ومعرف تعريف الدور
الخطوة التالية هي تحديد مستخدم أو مجموعة أمان أو تطبيق لإدارة الموارد للعميل. هذه الهوية لديها أذونات على مجموعة الموارد المدارة وفقا للدور المعين. يمكن أن يكون الدور أي دور مدمج في Azure كالمالك أو المساهم.
يستخدم هذا المثال مجموعة أمان، ويجب أن يكون حساب Microsoft Entra الخاص بك عضوا في المجموعة. للحصول على معرف عنصر المجموعة، استبدل العنصر النائب <managedAppDemo>
بما في ذلك أقواس الزاوية (<>
)، باسم مجموعتك. يمكنك استخدام قيمة المتغير عند نشر تعريف التطبيق المدار.
لإنشاء مجموعة Microsoft Entra جديدة، انتقل إلى إدارة مجموعات Microsoft Entra وعضوية المجموعة.
$principalid=(Get-AzADGroup -DisplayName <managedAppDemo>).Id
بعد ذلك، احصل على معرف تعريف الدور للدور المضمن في Azure الذي تريد منحه حق الوصول إلى المستخدم أو المجموعة أو التطبيق. يمكنك استخدام قيمة المتغير عند نشر تعريف التطبيق المدار.
$roleid=(Get-AzRoleDefinition -Name Owner).Id
إنشاء قالب نشر التعريف
استخدم ملف Bicep لنشر تعريف التطبيق المدار في كتالوج الخدمة. بعد التوزيع، يتم تخزين ملفات التعريف في حساب التخزين الخاص بك.
افتح Visual Studio Code، وأنشئ ملفا بالاسم deployDefinition.bicep واحفظه.
أضف تعليمة Bicep البرمجية التالية واحفظ الملف.
param location string = resourceGroup().location
@description('Name of the managed application definition.')
param managedApplicationDefinitionName string
@description('Resource ID for the bring your own storage account where the definition is stored.')
param definitionStorageResourceID string
@description('The URI of the .zip package file.')
param packageFileUri string
@description('Publishers Principal ID that needs permissions to manage resources in the managed resource group.')
param principalId string
@description('Role ID for permissions to the managed resource group.')
param roleId string
var definitionLockLevel = 'ReadOnly'
var definitionDisplayName = 'Sample BYOS managed application'
var definitionDescription = 'Sample BYOS managed application that deploys web resources'
resource managedApplicationDefinition 'Microsoft.Solutions/applicationDefinitions@2021-07-01' = {
name: managedApplicationDefinitionName
location: location
properties: {
lockLevel: definitionLockLevel
description: definitionDescription
displayName: definitionDisplayName
packageFileUri: packageFileUri
storageAccountId: definitionStorageResourceID
authorizations: [
{
principalId: principalId
roleDefinitionId: roleId
}
]
}
}
لمزيد من المعلومات حول خصائص القالب، انتقل إلى Microsoft.Solutions/applicationDefinitions.
في lockLevel
مجموعة الموارد المدارة يمنع العميل من تنفيذ عمليات غير مرغوب فيها على مجموعة الموارد هذه. يُمثل ReadOnly
حاليا مستوى القفل المدعوم. ReadOnly
يحدد أن العميل يمكنه قراءة الموارد الموجودة في مجموعة الموارد المدارة فقط. يتم إعفاء هويات الناشر التي تم منحها حق الوصول إلى مجموعة الموارد المدارة من مستوى التأمين.
إنشاء ملف المعلمة
يحتاج قالب نشر تعريف التطبيق المدار إلى إدخال العديد من المعلمات. يطالبك أمر التوزيع بالقيم أو يمكنك إنشاء ملف معلمة للقيم. في هذا المثال، نستخدم ملف معلمة لتمرير قيم المعلمات إلى أمر النشر.
في Visual Studio Code، أنشئ ملفا جديدا باسم deployDefinition-parameters.bicepparam واحفظه.
أضف ما يلي إلى ملف المعلمة واحفظه. بعد ذلك، استبدل بما في <placeholder values>
ذلك أقواس الزاوية (<>
)، بالقيم الخاصة بك.
using './deployDefinition.bicep'
param managedApplicationDefinitionName = 'sampleByosManagedApplication'
param definitionStorageResourceID = '<placeholder for you BYOS storage account ID>'
param packageFileUri = '<placeholder for the packageFileUri>'
param principalId = '<placeholder for principalid value>'
param roleId = '<placeholder for roleid value>'
يصف الجدول التالي قيم المعلمات لتعريف التطبيق المدار.
المعلمة | القيمة |
---|---|
managedApplicationDefinitionName |
اسم تعريف التطبيق المدار. على سبيل المثال، استخدم sampleByosManagedApplication. |
definitionStorageResourceID |
معرف المورد لحساب التخزين حيث يتم تخزين التعريف. استخدم قيمة المتغير الخاص بك byosstorageid . |
packageFileUri |
أدخل URI لملف حزمة .zip . استخدم قيمة المتغير الخاص بك packageuri . |
principalId |
المعرف الأساسي للناشرين الذي يحتاج إلى أذونات لإدارة الموارد في مجموعة الموارد المدارة. استخدم قيمة المتغير الخاص بك principalid . |
roleId |
معرف الدور للأذونات لمجموعة الموارد المدارة. على سبيل المثال المالك، المساهم، القارئ. استخدم قيمة المتغير الخاص بك roleid . |
للحصول على قيم المتغيرات الخاصة بك:
- Azure PowerShell: في PowerShell، اكتب
$variableName
لعرض قيمة متغير. - Azure CLI: في Bash، اكتب
echo $variableName
لعرض قيمة متغير.
نشر التعريف
عند نشر تعريف التطبيق المدار، يصبح متوفرا في كتالوج الخدمة. لا تنشر هذه العملية موارد التطبيق المدار.
إنشاء مجموعة موارد باسم byosAppDefinitionGroup ونشر تعريف التطبيق المدار إلى حساب التخزين الخاص بك.
New-AzResourceGroup -Name byosAppDefinitionGroup -Location westus
$deployparms = @{
ResourceGroupName = "byosAppDefinitionGroup"
TemplateFile = "deployDefinition.bicep"
TemplateParameterFile = "deployDefinition-parameters.bicepparam"
Name = "deployDefinition"
}
New-AzResourceGroupDeployment @deployparms
تحقق من تخزين ملفات التعريف
تستخدم خاصية القالب storageAccountId
، أثناء النشر، معرّف مورد حساب التخزين الخاص بك وتنشئ حاوية جديدة تحمل الاسم الحساس لحالة الأحرف applicationdefinitions
. يتم تخزين الملفات من حزمة .zip التي حددتها أثناء النشر في الحاوية الجديدة.
يمكنك استخدام الأوامر التالية للتحقق من حفظ ملفات تعريف التطبيق المدار في حاوية حساب التخزين الخاص بك.
Get-AzStorageContainer -Name applicationdefinitions -Context $byosstoragecontext |
Get-AzStorageBlob | Select-Object -Property Name | Format-List
إشعار
لللمزيد من الأمان، يمكنك إنشاء تعريف تطبيقات مدارة مخزنة في Azure storage account blob where encryption is enabled. تُشفر محتويات التعريف من خلال خيارات التشفير الخاصة بحساب التخزين. يمكن فقط للمستخدمين الذين لديهم أذونات للملف الوصول إلى التعريف في كتالوج الخدمة.
تحديث أمان حساب التخزين
بعد التوزيع الناجح، لتحسين أمان حساب التخزين، قم بتعطيل خاصية مفتاح الوصول المشترك. عند إنشاء حساب التخزين، أضفت تعيين دور ل Storage Blob Data Contributor الذي يمنحك الوصول إلى الحاوية والكائنات الثنائية كبيرة الحجم دون استخدام مفاتيح التخزين.
لمراجعة وتحديث إعدادات مفتاح الوصول المشترك لحساب التخزين، استخدم الأوامر التالية:
(Get-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName).AllowSharedKeyAccess
Set-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName -AllowSharedKeyAccess $false
تأكد من أن المستخدمين يمكنهم الوصول إلى التعريف الخاص بك
لديك حق الوصول إلى تعريف التطبيق المدار، ولكن عليك التأكد من أن وصول المستخدمين الآخرين في مؤسستك إليه. امنحهم على الأقل دور القارئ في التعريف. ربما ورثوا هذا المستوى من الوصول من الاشتراك أو مجموعة الموارد. للتحقق من من لديه حق الوصول إلى التعريف وإضافة مستخدمين أو مجموعات، انتقل إلى تعيين أدوار Azure باستخدام مدخل Microsoft Azure.
تنظيف الموارد
إذا كنت تريد نشر التعريف، فتابع مع قسم الخطوات التالية الذي يرتبط بالمقالة لنشر التعريف.
إذا انتهيت من تعريف التطبيق المدار، يمكنك حذف مجموعات الموارد التي قمت بإنشائها باسم packageStorageGroup و byosDefinitionStorageGroup و byosAppDefinitionGroup.
يطالبك الأمر بتأكيد رغبتك في إزالة مجموعة الموارد.
Remove-AzResourceGroup -Name packageStorageGroup
Remove-AzResourceGroup -Name byosDefinitionStorageGroup
Remove-AzResourceGroup -Name byosAppDefinitionGroup
الخطوات التالية
لقد نشرت تعريف التطبيق المدار. الآن، تعلم كيفية نشر مثيل لهذا التعريف.