البرنامج التعليمي: إنشاء تطبيق مُدار باستخدام الإجراءات والموارد المخصصة

في هذا البرنامج التعليمي، يمكنك إنشاء تطبيق خاص بك مُدار باستخدام الإجراءات والموارد المخصصة. سيتضمن التطبيق المُدار إجراءً مخصصًا في الصفحة Overview، ونوع مورد مخصصًا يظهر كعنصر قائمة منفصل في Table of Content إجراء سياقي مخصص على صفحة المورد المخصص.

يتضمن هذا البرنامج التعليمي الخطوات التالية:

  • ملف تعريف واجهة مستخدم المؤلف لإنشاء مثيل تطبيق مُدار
  • نموذج نشر المؤلف مع موفر Azure المخصص، وحساب تخزين Azure ودالة Azure
  • عرض البيانات الاصطناعية لتعريف المؤلف بواسطة الإجراءات والموارد المخصصة
  • نشر تعريف تطبيق مُدار
  • نشر مثيل للتطبيق المُدار
  • تنفيذ إجراءات مخصصة وإنشاء موارد مخصصة

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

لإكمال هذا البرنامج التعليمي، تحتاج إلى معرفة:

تعريف واجهة المستخدم

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

يحتوي ملف تعريف واجهة المستخدم لإنشاء مثيل تطبيق مُدار على عناصر الإدخال funcname وstoragename. يجب أن يكون اسم حساب التخزين واسم الدالة فريدين عالميًا. سيتم توزيع ملفات الدالة الافتراضية من حزمة دالة العينة، ولكن يمكنك تغييرها عن طريق إضافة عنصر إدخال لارتباط حزمة في createUiDefinition.json:

{
  "name": "funcname",
  "type": "Microsoft.Common.TextBox",
  "label": "Name of the function to be created",
  "toolTip": "Name of the function to be created",
  "visible": true,
  "constraints": {
    "required": true
  }
},
{
  "name": "storagename",
  "type": "Microsoft.Common.TextBox",
  "label": "Name of the storage to be created",
  "toolTip": "Name of the storage to be created",
  "visible": true,
  "constraints": {
    "required": true
  }
},
{
  "name": "zipFileBlobUri",
  "type": "Microsoft.Common.TextBox",
  "defaultValue": "https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.customproviders/custom-rp-with-function/artifacts/functionzip/functionpackage.zip",
  "label": "The Uri to the uploaded function zip file",
  "toolTip": "The Uri to the uploaded function zip file",
  "visible": true
}

وإخراج في createUiDefinition.json:

  "funcname": "[steps('applicationSettings').funcname]",
  "storageName": "[steps('applicationSettings').storagename]",
  "zipFileBlobUri": "[steps('applicationSettings').zipFileBlobUri]"

يمكن العثور على عينة createUiDefinition.json كاملة في المرجع: البيانات الاصطناعية لعناصر واجهة المستخدم.

نموذج يحتوي على موفر مخصص

لإنشاء مثيل تطبيق مُدار مع موفر مخصص، تحتاج إلى تعريف مورد موفر مخصص باسم عام وكتابة Microsoft.CustomProviders/resourceProviders في mainTemplate.json. في هذا المورد، يمكنك تحديد أنواع الموارد والإجراءات الخاصة بالخدمة. لتوزيع دالة Azure وحساب تخزين Azure، تحدد المثيلات الموارد من النوع Microsoft.Web/sites وMicrosoft.Storage/storageAccountsعلى التوالي.

في هذا البرنامج التعليمي، ستقوم بإنشاء نوع مورد users واحد، وإجراء ping مخصص وإجراء users/contextAction مخصص، والذي سيتم تنفيذه في سياق مورد users مخصص. لكل نوع موارد وإجراء، قم بتوفير نقطة نهاية تشير إلى الدالة التي تحمل الاسم المتوفر في createUiDefinition.json. حدّد نوع التوجيه كـ Proxy,Cache لأنواع الموارد وProxy للإجراءات:

{
  "apiVersion": "[variables('customrpApiversion')]",
  "type": "Microsoft.CustomProviders/resourceProviders",
  "name": "[variables('customProviderName')]",
  "location": "[parameters('location')]",
  "properties": {
    "actions": [
      {
        "name": "ping",
        "routingType": "Proxy",
        "endpoint": "[listSecrets(resourceId('Microsoft.Web/sites/functions', parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
      },
      {
        "name": "users/contextAction",
        "routingType": "Proxy",
        "endpoint": "[listSecrets(resourceId('Microsoft.Web/sites/functions', parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
      }
    ],
    "resourceTypes": [
      {
        "name": "users",
        "routingType": "Proxy,Cache",
        "endpoint": "[listSecrets(resourceId('Microsoft.Web/sites/functions', parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
      }
    ]
  },
  "dependsOn": [
    "[concat('Microsoft.Web/sites/',parameters('funcname'))]"
  ]
}

يمكن العثور على عينة mainTemplate.json كاملة في المرجع: توزيع البيانات الاصطناعية للعينة.

عرض البيانات الاصطناعية للتعريف

لتعريف واجهة المستخدم التي تتضمن إجراءات مخصصة وموارد مخصصة في التطبيق المُدار، تحتاج إلى تأليف البيانات الاصطناعية viewDefinition.json. للحصول على مزيدٍ من المعلومات حول عرض بيانات التعريف الاصطناعية، راجع عرض تطبيقات Azure المُدارة.

في هذا البرنامج التعليمي، ستتعلم:

  • الصفحة نظرة عامة مع زر شريط الأدوات الذي يمثل إجراءً TestAction مخصصًا مع إدخال النص الأساسي.
  • الصفحة المستخدمون التي تمثل نوع مورد users مخصص.
  • إجراء users/contextAction لمورد مخصص في الصفحة المستخدمون الذي سيتم تنفيذه في سياق مورد مخصص من النوع users.

يُظهر المثال التالي تكوين طريقة العرض لصفحة "نظرة عامة":

{
    "kind": "Overview",
    "properties": {
      "header": "Welcome to your Demo Azure Managed Application",
      "description": "This Managed application with Custom Provider is for demo purposes only.",
      "commands": [{
          "displayName": "Ping Action",
          "path": "/customping",
          "icon": "LaunchCurrent"
      }]
    }
  }

يتضمن المثال أدناه تكوين صفحة موارد "المستخدمين" مع الإجراء للمورد المخصص:

{
    "kind": "CustomResources",
    "properties": {
      "displayName": "Users",
      "version": "1.0.0.0",
      "resourceType": "users",
      "createUIDefinition": {
      },
      "commands": [{
        "displayName": "Custom Context Action",
        "path": "users/contextAction",
        "icon": "Start"
      }],
      "columns": [
        { "key": "properties.FullName", "displayName": "Full Name" },
        { "key": "properties.Location", "displayName": "Location", "optional": true }
      ]
    }
  }

يمكن العثور على عينة viewDefinition.json الكاملة في المرجع: عرض بيانات التعريف الاصطناعية.

تعريف تطبيق مُدار

يمكنك حزم البيانات الاصطناعية للتطبيق المُدار التالي في أرشيف بصيغة zip وتحميلها في مساحة التخزين:

  • createUiDefinition.json
  • mainTemplate.json
  • viewDefinition.json

يجب أن تكون كافة الملفات في مستوى الجذر. يمكن تخزين الحزمة التي تحتوي على بيانات اصطناعية في أي مساحة تخزين، مثل الكائن الثنائي كبير الحجم الخاص بـ GitHub أو الكائن الثنائي كبير الحجم الخاص بحساب تخزين Azure. فيما يلي برنامج نصي لتحميل حزمة التطبيق إلى حساب تخزين:

$resourceGroup="appResourcesGroup"
$storageName="mystorageaccount$RANDOM"

# Sign in to your Azure subscription
Connect-AzAccount
# Create resource group for managed application definition and application package
New-AzResourceGroup -Name $resourceGroup -Location eastus

# Create storage account for a package with application artifacts
$storageAccount=New-AzStorageAccount `
  -ResourceGroupName $resourceGroup `
  -Name $storageName `
  -SkuName Standard_LRS `
  -Location eastus `
$ctx=$storageAccount.Context

# Create storage container and upload zip to blob
New-AzStorageContainer -Name appcontainer -Context $ctx -Permission blob
Set-AzStorageBlobContent `
  -File "path_to_your_zip_package" `
  -Container appcontainer `
  -Blob app.zip `
  -Context $ctx

# Get blob absolute uri
$blobUri=(Get-AzureStorageBlob -Container appcontainer -Blob app.zip -Context $ctx).ICloudBlob.uri.AbsoluteUri

شغّل البرنامج النصي Azure CLI أدناه أو اتبع الخطوات في مدخل Azure لتوزيع تعريف التطبيق المُدار من كتالوج الخدمة:

لتشغيل هذا النموذج، يرجى تثبيت أحدث إصدار من Azure CLI . للبدء، يرجى تشغيل az login لإنشاء اتصال مع Azure.

كُتبت نماذج Azure CLI للواجهة bash. لتشغيل هذا النموذج في Windows PowerShell أو موجه الأوامر، يلزم تغيير عناصر البرنامج النصي.

resourceGroup="appResourcesGroup"
# Select subscription and create resource group (if you have not created yet)
az account set --subscription <subscriptionID>
az group create --name $resourceGroup --location eastus

# Get object ID of your identity
userid=$(az ad user list --upn example@contoso.org --query [0].id --output tsv)
# Get role definition ID for the Owner role
roleid=$(az role definition list --name Owner --query [].name --output tsv)

# Create managed application definition resource
az managedapp definition create \
  --name "ManagedUsersAppDefinition" \
  --location "eastus" \
  --resource-group $resourceGroup \
  --lock-level ReadOnly \
  --display-name "Managed users app definition" \
  --description "Managed application with Azure Custom Provider" \
  --authorizations "$userid:$roleid" \
  --package-file-uri "path to your app.zip package"

مثيل التطبيق المُدار

عند توزيع تعريف التطبيق المُدار، شغّل البرنامج النصي أدناه أو اتبع الخطوات الموجودة في مدخل Azure لتوزيع مثيل التطبيق المُدار مع الموفر المخصص:

appResourcesGroup="appResourcesGroup"
applicationGroup="usersApplicationGroup"

# Create resource group for managed application instance
az group create --name $applicationGroup --location eastus

# Get ID of managed application definition
appid=$(az managedapp definition show --name ManagedUsersAppDefinition --resource-group $appResourcesGroup --query id --output tsv)

# Create the managed application
az managedapp create \
  --name ManagedUsersApp \
  --location "eastus" \
  --kind "Servicecatalog" \
  --resource-group $applicationGroup \
  --managedapp-definition-id $appid \
  --managed-rg-id "managedResourcesGroup" \
  --parameters "{\"funcname\": {\"value\": \"managedusersappfunction\"}, \"storageName\": {\"value\": \"managedusersappstorage\"}}"

إجراءات وموارد مخصصة

بعد توزيع مثيل تطبيق كتالوج الخدمة، تكون لديك مجموعتَا موارد جديدتان. تحتوي مجموعة الموارد الأولى applicationGroup على مثيل للتطبيق المُدار، وتحتفظ مجموعة الموارد الثانية managedResourceGroup بالموارد للتطبيق المُدار، بما في ذلك الموفر المخصص.

Application resource groups

يمكنك الانتقال إلى مثيل تطبيق مُدار وتنفيذ إجراء مخصص في الصفحة "نظرة عامة" وإنشاء مورد مخصص للمستخدمين في الصفحة "المستخدمين" وتشغيل سياق إجراء مخصص في مورد مخصص.

  • انتقل إلى الصفحة "نظرة عامة" وانقر فوق الزر "إجراء Ping":

Perform custom action

  • انتقل إلى الصفحة "المستخدمون" وانقر فوق الزر "إضافة". توفير مدخلات لإنشاء مورد وإرسال النموذج:

Screenshot shows the Add button selected from Users.

  • انتقل إلى الصفحة "المستخدمون"، وحدد المورد "المستخدمون" وانقر فوق "إجراء السياق المخصص":

Screenshot shows Custom Context Action selected.

تنظيف الموارد

في الخطوات السابقة، أنشأت موارد Azure في إحدى مجموعات الموارد. إذا لم تكن تتوقع أن تحتاج إلى هذه الموارد في المستقبل، يمكنك حذفها عن طريق حذف مجموعة الموارد.

من قائمة مدخل Microsoft Azure أو من Home، حدد Resource groups. بعد ذلك، في صفحة مجموعات الموارد، حدد "myResourceGroup".

في صفحة myResourceGroup، تأكد من أن الموارد المدرجة هي التي تريد حذفها.

حدد حذف مجموعة الموارد واكتب myResourceGroup في مربع النص للتأكيد، ثم حدد حذف.

البحث عن المساعدة

إذا كانت لديك أسئلة حول تطبيقات Azure المُدارة، يمكنك محاولة السؤال عن الدفق المكدس الزائد باستخدام azure-managed-app للعلامة أو الأسئلة والأجوبة في Microsoft باستخدام azure-managed-application للعلامة. من الممكن أن يكون قد تم طرح السؤال نفسه والإجابة عنه؛ لذا تحقق أولاً قبل النشر. يُرجى استخدام العلامات ذات الصلة للحصول على إجابة بشكل أسرع.

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

لنشر تطبيقك المُدار إلى Azure Marketplace، راجع تطبيقات Azure المُدارة في Marketplace.

تعرّف على المزيد حول موفري Azure المخصصين.