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

في هذا البرنامج التعليمي، يمكنك إنشاء تطبيق خاص بك مُدار باستخدام الإجراءات والموارد المخصصة. يحتوي التطبيق المدار على إجراء مخصص على 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، وإجراء مخصص، وإجراء users/contextAction مخصص يتم تنفيذه في سياق users مورد ping مخصص. لكل نوع مورد وإجراء، قم بتوفير نقطة نهاية تشير إلى الدالة بالاسم المقدم في createUiDefinition.json. routingType حدد كما 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 التالي أو اتبع الخطوات في مدخل Microsoft 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"

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

عند نشر تعريف التطبيق المدار، قم بتشغيل البرنامج النصي التالي أو اتبع الخطوات في مدخل Microsoft 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 الموارد بالموارد للتطبيق المدار، بما في ذلك الموفر المخصص.

مجموعات موارد التطبيق

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

  • انتقل إلى Overview وحدد Ping Action:

تنفيذ إجراء مخصص

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

تعرض لقطة الشاشة الزر

  • انتقل إلى Users وحدد موردا للمستخدمين وحدد Custom Context Action:

تعرض لقطة الشاشة

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

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

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

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

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

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

إذا كانت لديك أسئلة أو تحتاج إلى إجابة حول تطبيقات Azure المدارة، يمكنك نشر سؤال على Stack Overflow مع العلامة azure-managed-app أو Microsoft Q&A مع العلامة azure-managed-application.

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

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

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