التشغيل السريع: إحضار التخزين الخاص بك لإنشاء تعريف تطبيق مدار من Azure ونشره

يوفر هذا التشغيل السريع مقدمة لإحضار التخزين الخاص بك (BYOS) لتطبيق Azure المدار. يمكنك إنشاء تعريف تطبيق مدار ونشره في كتالوج الخدمة لأعضاء مؤسستك. عند استخدام حساب التخزين الخاص بك، يمكن أن يتجاوز تعريف التطبيق المدار حد 120 ميغابايت لكتالوج الخدمة.

لنشر تعريف تطبيق مدار إلى كتالوج الخدمة، قم بالمهام التالية:

  • إنشاء قالب Azure Resource Manager (قالب ARM) الذي يحدد موارد Azure التي تم نشرها بواسطة التطبيق المدار.
  • تعريف عناصر واجهة المستخدم للمدخل عند نشر التطبيق المدار.
  • إنشاء حزمة .zip تحتوي على ملفات JSON المطلوبة.
  • إنشاء حساب تخزين حيث تقوم بتخزين تعريف التطبيق المدار.
  • انشر تعريف التطبيق المدار إلى حساب التخزين الخاص بك بحيث يكون متوفرا في كتالوج الخدمة.

إذا كان تعريف التطبيق المدار أقل من 120 ميغابايت ولا تريد استخدام حساب التخزين الخاص بك، فانتقل إلى التشغيل السريع: إنشاء تعريف تطبيق مدار من Azure ونشره.

يمكنك استخدام Bicep لتطوير تعريف تطبيق مدار ولكن يجب تحويله إلى قالب ARM JSON قبل أن تتمكن من نشر التعريف في Azure. لمزيد من المعلومات، انتقل إلى التشغيل السريع: استخدم Bicep لإنشاء تعريف تطبيق مدار من Azure ونشره.

يمكنك أيضا استخدام Bicep لنشر تعريف تطبيق مدار من كتالوج الخدمة. لمزيد من المعلومات، انتقل إلى التشغيل السريع: استخدم Bicep لنشر تعريف تطبيق Azure المدار.

المتطلبات الأساسية

لاستكمال هذا التشغيل السريع، ستحتاج إلى العناصر التالية:

إنشاء قالب 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

الخطوات التالية

لقد نشرت تعريف التطبيق المدار. الآن، تعلم كيفية نشر مثيل لهذا التعريف.