توسيع الموارد باستخدام موفري الموارد المخصصين

في هذا البرنامج التعليمي، سوف تقوم بالنشر موفر موارد مخصص إلى Azure لتوسعة واجهة برمجة تطبيقات إدارة موارد Azure بنوع مورد Microsoft.CustomProviders/associations. يوضح البرنامج التعليمي كيفية توسيع الموارد الموجودة خارج مجموعة الموارد حيث يوجد مثيل موفر الموارد المخصص. في هذا البرنامج التعليمي، يتم تشغيل موفر الموارد المخصصة بواسطة تطبيق منطق Azure، ولكن يمكنك استخدام أي نقطة نهاية واجهة برمجة التطبيقات عامة.

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

لإكمال هذا البرنامج التعليمي، تأكد من مراجعة التالي:

البدء في إعداد الموارد

في هذا البرنامج التعليمي، هناك قطعتان يجب توزيعهما: موفر الموارد المخصصوالاقتران. لتسهيل العملية، يمكنك اختياريًا استخدام قالب واحد ينشر كليهما.

سيستخدم القالب هذه الموارد:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "type": "string",
            "allowedValues": [
                "australiaeast",
                "eastus",
                "westeurope"
            ],
            "metadata": {
                "description": "Location for the resources."
            }
        },
        "logicAppName": {
            "type": "string",
            "defaultValue": "[uniqueString(resourceGroup().id)]",
            "metadata": {
                "description": "Name of the logic app to be created."
            }
        },
        "customResourceProviderName": {
            "type": "string",
            "defaultValue": "[uniqueString(resourceGroup().id)]",
            "metadata": {
                "description": "Name of the custom resource provider to be created."
            }
        },
        "customResourceProviderId": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "The resource ID of an existing custom resource provider. Provide this to skip deployment of new logic app and custom resource provider."
            }
        },
        "associationName": {
            "type": "string",
            "defaultValue": "myAssociationResource",
            "metadata": {
                "description": "Name of the custom resource that is being created."
            }
        }
    },
    "resources": [
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2021-04-01",
            "condition": "[empty(parameters('customResourceProviderId'))]",
            "name": "customProviderInfrastructureTemplate",
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {
                        "logicAppName": {
                            "type": "string",
                            "defaultValue": "[parameters('logicAppName')]"
                        }
                    },
                    "resources": [
                        {
                            "type": "Microsoft.Logic/workflows",
                            "apiVersion": "2019-05-01",
                            "name": "[parameters('logicAppName')]",
                            "location": "[parameters('location')]",
                            "properties": {
                                "state": "Enabled",
                                "definition": {
                                    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
                                    "actions": {
                                        "Switch": {
                                            "cases": {
                                                "Case": {
                                                    "actions": {
                                                        "CreateCustomResource": {
                                                            "inputs": {
                                                                "body": {
                                                                    "properties": "@addProperty(triggerBody().Body['properties'], 'myDynamicProperty', 'myDynamicValue')"
                                                                },
                                                                "statusCode": 200
                                                            },
                                                            "kind": "Http",
                                                            "type": "Response"
                                                        }
                                                    },
                                                    "case": "CREATE"
                                                }
                                            },
                                            "default": {
                                                "actions": {
                                                    "DefaultHttpResponse": {
                                                        "inputs": {
                                                            "statusCode": 200
                                                        },
                                                        "kind": "Http",
                                                        "type": "Response"
                                                    }
                                                }
                                            },
                                            "expression": "@triggerBody().operationType",
                                            "type": "Switch"
                                        }
                                    },
                                    "contentVersion": "1.0.0.0",
                                    "outputs": {},
                                    "parameters": {},
                                    "triggers": {
                                        "CustomProviderWebhook": {
                                            "inputs": {
                                                "schema": {}
                                            },
                                            "kind": "Http",
                                            "type": "Request"
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "type": "Microsoft.CustomProviders/resourceProviders",
                            "apiVersion": "2018-09-01-preview",
                            "name": "[parameters('customResourceProviderName')]",
                            "location": "[parameters('location')]",
                            "properties": {
                                "resourceTypes": [
                                    {
                                        "name": "associations",
                                        "mode": "Secure",
                                        "routingType": "Webhook,Cache,Extension",
                                        "endpoint": "[[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows', parameters('logicAppName')), '/triggers/CustomProviderWebhook'), '2019-05-01').value]"
                                    }
                                ]
                            }
                        }
                    ],
                    "outputs": {
                        "customProviderResourceId": {
                            "type": "string",
                            "value": "[resourceId('Microsoft.CustomProviders/resourceProviders', parameters('customResourceProviderName'))]"
                        }
                    }
                }
            }
        },
        {
            "type": "Microsoft.CustomProviders/associations",
            "apiVersion": "2018-09-01-preview",
            "name": "[parameters('associationName')]",
            "location": "global",
            "properties": {
                "targetResourceId": "[if(empty(parameters('customResourceProviderId')), reference('customProviderInfrastructureTemplate').outputs.customProviderResourceId.value, parameters('customResourceProviderId'))]",
                "myCustomInputProperty": "myCustomInputValue",
                "myCustomInputObject": {
                    "Property1": "Value1"
                }
            }
        }
    ],
    "outputs": {
        "associationResource": {
            "type": "object",
            "value": "[reference(parameters('associationName'), '2018-09-01-preview', 'Full')]"
        }
    }
}

توزيع البنية الأساسية لموفر الموارد المخصص

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

لننشر البنية الأساسية لموفر الموارد المخصص. إما نسخ القالب السابق وحفظه ونشره، وإما اتباع البنية الأساسية ونشرها باستخدام مدخل Azure.

  1. انتقل إلى مدخل Azure.

  2. ابحث عن templates في All Services أو باستخدام مربع البحث الرئيسي:

    لقطة شاشة لشريط البحث في مدخل Microsoft Azure مع إدخال

  3. حدد Add في جزء Templates:

    لقطة شاشة لجزء Templates في مدخل Microsoft Azure مع تمييز الزر Add.

  4. ضمن General، أدخل Name وDescription القالب الجديد:

    لقطة شاشة لقسم عام في مدخل Microsoft Azure حيث يدخل المستخدم اسما ووصفا للقالب الجديد.

  5. إنشاء قالب Resource Manager عن طريق النسخ في قالب JSON من قسم Get started with resource onboarding من هذه المقالة:

    لقطة شاشة لمدخل Microsoft Azure حيث لصق المستخدم قالب JSON في قسم قالب ARM.

  6. حدد Add لإنشاء القالب. إذا لم يظهر القالب الجديد، فحدد Refresh.

  7. حدد القالب الذي تم إنشاؤه حديثًا ثم حدد Deploy:

    لقطة شاشة لمدخل Microsoft Azure تعرض القالب الذي تم إنشاؤه حديثا مع تمييز الزر Deploy.

  8. أدخل إعدادات الحقول المطلوبة ثم حدد مجموعة الاشتراك والموارد. يمكنك ترك مربع Custom Resource Provider Id فارغًا.

    اسم الإعداد مطلوب؟ الوصف
    ‏‏الموقع نعم موقع الموارد في القالب.
    اسم تطبيق المنطق لا اسم تطبيق المنطق.
    اسم موفر الموارد المخصص لا اسم موفر الموارد المخصص.
    معرف موفر الموارد المخصص لا موفر موارد مخصص موجود يدعم مورد الاقتران. إذا حددت قيمة هنا، فسيتم تخطي تطبيق المنطق وتوزيع موفر الموارد المخصص.
    اسم الاقتران لا اسم مورد الاقتران.

    معلمات النموذج:

    لقطة شاشة لمدخل Microsoft Azure تعرض حقول إدخال معلمات القالب لتوزيع موفر الموارد المخصص.

  9. انتقِل إلى النشر وانتظر حتى يتم الانتهاء منه. يجب مراجعة شيء ما مثل لقطة الشاشة التالية. يجب أن تشاهد مورد الاقتران الجديد كإخراج:

    لقطة شاشة لمدخل Microsoft Azure تعرض توزيعا ناجحا مع مورد الاقتران الجديد كإخراج.

    إليك مجموعة الموارد، مع تحديد Show hidden types:

    لقطة شاشة لمجموعة الموارد في مدخل Microsoft Azure مع تحديد إظهار الأنواع المخفية، وعرض توزيع موفر الموارد المخصص.

  10. استكشف تطبيق المنطق بعلامة التبويب Runs history لمشاهدة الاستدعاءات لإنشاء الاقتران:

    لقطة شاشة لعلامة تبويب محفوظات تشغيل تطبيق المنطق في مدخل Microsoft Azure تعرض استدعاءات إنشاء الاقتران.

نشر اقترانات إضافية

بعد إعداد البنية الأساسية لموفر الموارد المخصص، يمكنك بسهولة نشر المزيد من الاقترانات. لا يجب أن تكون مجموعة الموارد للاقترانات الإضافية هي نفسها مجموعة الموارد حيث قمت بنشر البنية الأساسية لموفر الموارد المخصص. لإنشاء اقتران، تحتاج إلى أن تكون لديك أذونات Microsoft.CustomProviders/resourceproviders/write بمعرف موفر الموارد المخصص المحدد.

  1. انتقل إلى مورد Microsoft.CustomProviders/resourceProviders لموفر الموارد المخصص في مجموعة الموارد للتوزيع السابق. ستحتاج إلى تحديد خانة الاختيار عرض الأنواع المخفية:

    لقطة شاشة لمدخل Microsoft Azure تعرض مورد موفر الموارد المخصص في مجموعة الموارد مع تحديد إظهار الأنواع المخفية.

  2. انسخ خاصية معرف المورد لموفر الموارد المخصص.

  3. ابحث عن templates في All Services أو باستخدام مربع البحث الرئيسي:

    لقطة شاشة لشريط البحث في مدخل Microsoft Azure مع إدخال

  4. حدد القالب الذي تم إنشاؤه مسبقًا ثم حدد Deploy:

    لقطة شاشة لمدخل Microsoft Azure تعرض القالب الذي تم إنشاؤه مسبقا مع تمييز الزر Deploy.

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

  6. انتقِل إلى النشر وانتظر حتى يتم الانتهاء منه. يجب الآن نشر مورد الاقترانات الجديدة فقط:

    لقطة شاشة لمدخل Microsoft Azure تعرض التوزيع الناجح لمورد الاقترانات الجديد.

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

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

في هذه المقالة، نشرت موفر موارد مخصص إلى Azure لتوسعة واجهة برمجة تطبيقات إدارة موارد Azure بنوع مورد Microsoft.CustomProviders/associates. لمتابعة التعرف على موفري الموارد المخصصة، راجع: