Расширение ресурсов с помощью настраиваемых поставщиков ресурсов
В этом руководстве вы развернете в Azure пользовательский поставщик ресурсов, расширяющий API Azure Resource Manager с типом ресурса Microsoft.CustomProviders/associations. В этом руководстве показано, как расширить существующие ресурсы, которые находятся за пределами группы ресурсов, в которой находится экземпляр пользовательского поставщика ресурсов. В этом руководстве поставщик пользовательских ресурсов работает на базе приложения логики Azure, но вы можете использовать любую общедоступную конечную точку API.
Предварительные требования
Для работы с этим руководством вам потребуется следующее.
- Возможности поставщиков настраиваемых ресурсов Azure.
- Основные сведения о подключении ресурсов с помощью настраиваемых поставщиков ресурсов.
Начало работы с подключением ресурсов
В этом руководстве необходимо развернуть два элемента: настраиваемый поставщик ресурсов и связь. Чтобы упростить этот процесс, вы можете дополнительно использовать один шаблон, который развертывает оба элемента.
В шаблоне будут использоваться следующие ресурсы:
- Microsoft.CustomProviders/resourceProviders
- Microsoft.Logic/workflows
- Microsoft.CustomProviders/associations
{
"$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.
Перейдите на портал Azure.
Найдите шаблоны в разделе Все службы или с помощью основного поля поиска:
В области Шаблоны выберите Добавить:
В разделе Общиевведите имя и описание для нового шаблона:
Создание шаблона Resource Manager, скопировав шаблон JSON из раздела "Начало работы с подключением ресурсов" этой статьи:
Чтобы создать шаблон, выберите Добавить. Если новый шаблон не отображается, выберите Обновить.
Выберите только что созданный шаблон, а затем нажмите Развернуть:
Введите параметры для обязательных полей, а затем выберите подписку и группу ресурсов. Поле идентификатора настраиваемого поставщика ресурсов можно оставить пустым.
Имя параметра Необходим? Описание Расположение Да Расположение ресурсов в шаблоне. Название приложения логики Нет Имя приложения логики. Имя настраиваемого поставщика ресурсов Нет Имя настраиваемого поставщика ресурсов. Идентификатор настраиваемого поставщика ресурсов Нет Существующий настраиваемый поставщик ресурсов, который поддерживает ресурс связи. Если указать здесь значение, развертывание приложения логики и пользовательского поставщика ресурсов будет пропущено. Имя ассоциации Нет Имя ресурса связи. Примеры параметров:
Перейдите к развертыванию и дождитесь его завершения. Результат будет подобен приведенному на следующем снимке экрана. Новый ресурс связи появится в виде выходных данных:
Вот группа ресурсов, в которой выбрано Показывать скрытые типы:
Просмотрите вкладку приложения логики Журнал выполнения, чтобы увидеть вызовы к созданию связи:
Развертывание дополнительных связей
После настройки настраиваемой инфраструктуры поставщика ресурсов можно легко развернуть дополнительные связи. Группа ресурсов для дополнительных связей не обязательно должна совпадать с группой ресурсов, в которой развернута инфраструктура настраиваемого поставщика ресурсов. Чтобы создать связь, необходимо иметь разрешения Microsoft.CustomProviders/resourceproviders/write для указанного идентификатора настраиваемого поставщика ресурса.
Перейдите к ресурсу Поставщика настраиваемых ресурсов Microsoft.CustomProviders/resourceProviders в группе ресурсов предыдущего развертывания. Вам понадобится установить флажок Показывать скрытые типы.
Скопируйте свойство Идентификатор ресурса настраиваемого поставщика ресурсов.
Найдите шаблоны в разделе Все службы или с помощью основного поля поиска:
Выберите созданный ранее шаблон и щелкните Развернуть:
Введите параметры для обязательных полей, а затем выберите подписку и другую группу ресурсов. В поле Настраиваемый идентификатор поставщика ресурсов введите идентификатор ресурса, скопированный из пользовательского поставщика ресурсов, развернутого ранее.
Перейдите к развертыванию и дождитесь его завершения. Теперь он должен развертывать только новый ресурс связей:
Можно вернуться к полю приложения логики Журнал выполнения и увидеть, что к приложению логики был сделан другой вызов. Вы можете обновить приложение логики, добавляя дополнительные функциональные возможности для каждой созданной связи.
Дальнейшие действия
В этой статье вы выполнили развертывание в Azure пользовательского поставщика ресурсов, расширяющего API Azure Resource Manager с типом ресурса Microsoft.CustomProviders/associates. Чтобы продолжить изучение настраиваемых поставщиков ресурсов, см. статью: