Использование пользовательских параметров с шаблоном Resource Manager
ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics
Совет
Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !
Если у вашего экземпляра для разработки есть связанный репозиторий Git, можно переопределить параметры шаблона Resource Manager по умолчанию, созданного путем публикации или экспорта шаблона. Возможно, вы захотите обойти параметр конфигурации по умолчанию Resource Manager в этих сценариях:
Вы используете автоматизацию CI/CD и хотите изменить некоторые свойства во время развертывания Resource Manager, но свойства не будут параметризованы по умолчанию.
Ваша фабрика настолько велика, что шаблон Resource Manager по умолчанию является недопустимым, так как он превышает максимально допустимое количество параметров (256).
Три варианта для управления лимитом для пользовательского параметра 256:
- Используйте файл с пользовательским параметром и удалите свойства, которые не требуют параметризации, т. е. свойства сохраняют значения по умолчанию и таким образом количество параметров уменьшается.
- Выполните перепроектирование кода логики в потоке данных для сокращения количества параметров, например, параметры конвейера все имеют одинаковое значение, поэтому вместо них можно использовать глобальные параметры.
- Разделите одну фабрику данных на несколько фабрик данных.
Для того, чтобы обойти параметры по умолчанию конфигурации Resource Manager, перейдите в раздел Управление и выберите шаблон ARM в разделе "Управление ресурсами". В разделе настройка параметров конфигурации ARM щелкните по значку Изменить в разделе "Изменение параметра конфигурации", чтобы открыть редактор кодов параметра конфигурации Resource Manager.
Примечание.
Параметр конфигурации ARM включен только в "Режиме GIT". Сейчас она является недоступной в "рабочем режиме" или режиме "Фабрика данных".
При создании пользовательского параметра конфигурации Resource Manager создается файл с именем arm-template-parameters-definition.json в корневой папке вашей ветви git. Необходимо использовать точное имя файла.
При публикации из ветви совместной работы Фабрика данных считывает этот файл и использует его конфигурацию, чтобы определить свойства, которые будут параметризованы. Если файл не найден, используется шаблон по умолчанию.
При экспорте шаблона Resource Manager Фабрика данных считывает этот файл из ветви, в которой вы в данный момент работаете, а не из ветви совместной работы. Вы можете создать или изменить файл из частной ветви, где можно протестировать изменения, выбрав Export ARM Template (Экспорт шаблона ARM) в пользовательском интерфейсе. Затем можно выполнить слияние файла в ветвь совместной работы.
Примечание.
Пользовательский параметр конфигурации Resource Manager не меняет лимит параметра шаблона ARM, составляющего 256. Он позволяет выбирать и уменьшать количество параметризованных свойств.
Синтаксис пользовательских параметров
Ниже приведены некоторые рекомендации, которые следует выполнить при создании файла пользовательских параметров arm-template-parameters-definition.json. Файл состоит из раздела для каждого типа сущности: триггера, конвейера, связанной службы, набора данных, среды выполнения интеграции и потока данных.
- Введите путь к свойству в соответствующем типе сущности.
- Присвоение имени свойства значения
*
указывает, что необходимо параметризовать все свойства под ним (только до первого уровня, но не рекурсивно). Вы также можете указать исключения в этой конфигурации. - Установка значения свойства в виде строки указывает, что вы хотите параметризовать свойство. Используйте формат
<action>:<name>:<stype>
.<action>
может быть одним из следующих символов:=
означает сохранение текущего значения как значения по умолчанию для параметра.-
означает, что не следует хранить значение по умолчанию для параметра.|
используется для секретов из Azure Key Vault для строк подключения или ключей.
<name>
— это имя параметра. Если оно пустое, то принимает имя свойства. Если значение начинается со знака-
, то оно сокращено. Например,AzureStorage1_properties_typeProperties_connectionString
будет сокращено доAzureStorage1_connectionString
.<stype>
является типом параметра. Если параметр<stype>
пуст, используется тип по умолчаниюstring
. Поддерживаемые значения:string
,securestring
,int
,bool
,object
,secureobject
иarray
.
- При указании массива в файле определения вы можете указать, что соответствующее свойство в шаблоне является массивом. Фабрика данных выполняет итерацию всех объектов в массиве с помощью определения, указанного в объекте среды выполнения интеграции массива. Второй объект, строка, становится именем свойства, которое используется в качестве имени параметра для каждой итерации.
- Определение не может быть указано для экземпляра ресурса. Любое определение применяется ко всем ресурсам этого типа.
- По умолчанию все защищенные строки, такие как секреты Key Vault и защищенные строки, такие как строки подключения, ключи и токены, являются параметризованными.
Пример шаблона параметризации
Вот пример, как может выглядеть параметр конфигурации Resource Manager: Он содержит примеры нескольких возможных вариантов использования, включая параметризацию вложенных действий в конвейере и изменение значения defaultValue для параметра связанной службы.
{
"Microsoft.DataFactory/factories/pipelines": {
"properties": {
"activities": [{
"typeProperties": {
"waitTimeInSeconds": "-::int",
"headers": "=::object",
"activities": [
{
"typeProperties": {
"url": "-:-webUrl:string"
}
}
]
}
}]
}
},
"Microsoft.DataFactory/factories/integrationRuntimes": {
"properties": {
"typeProperties": {
"*": "="
}
}
},
"Microsoft.DataFactory/factories/triggers": {
"properties": {
"typeProperties": {
"recurrence": {
"*": "=",
"interval": "=:triggerSuffix:int",
"frequency": "=:-freq"
},
"maxConcurrency": "="
}
}
},
"Microsoft.DataFactory/factories/linkedServices": {
"*": {
"properties": {
"typeProperties": {
"accountName": "=",
"username": "=",
"connectionString": "|:-connectionString:secureString",
"secretAccessKey": "|"
}
}
},
"AzureDataLakeStore": {
"properties": {
"typeProperties": {
"dataLakeStoreUri": "="
}
}
},
"AzureKeyVault": {
"properties": {
"typeProperties": {
"baseUrl": "|:baseUrl:secureString"
},
"parameters": {
"KeyVaultURL": {
"type": "=",
"defaultValue": "|:defaultValue:secureString"
}
}
}
}
},
"Microsoft.DataFactory/factories/datasets": {
"*": {
"properties": {
"typeProperties": {
"folderPath": "=",
"fileName": "="
}
}
}
},
"Microsoft.DataFactory/factories/credentials" : {
"properties": {
"typeProperties": {
"resourceId": "="
}
}
}
}
Ниже приведено объяснение того, как создавался предыдущий шаблон, упорядоченный по типу ресурсов.
Pipelines
- Любое свойство в пути
activities/typeProperties/waitTimeInSeconds
параметризовано. Любое действие в конвейере, которое имеет свойство уровня кода с именемwaitTimeInSeconds
(например, действиеWait
) параметризовано как число с именем по умолчанию. Но в шаблоне Resource Manager не будет значения по умолчанию. Оно будет обязательным во время развертывания Resource Manager. - Аналогично свойство
headers
(например, в действииWeb
) параметризовано с типомobject
(JObject). Оно имеет значение по умолчанию, то есть то же значение, что и у исходной фабрики.
IntegrationRuntimes
- Все свойства в пути
typeProperties
параметризованы с соответствующими значениями по умолчанию. Например, в свойствах типаIntegrationRuntimes
есть два свойства:computeProperties
иssisProperties
. Оба типа свойств создаются с соответствующими значениями по умолчанию и типами (объект).
Триггеры
- В разделе
typeProperties
два свойства являются параметризованными. Первое из нихmaxConcurrency
, для которого задано значение по умолчанию и имеет типstring
. Имя параметра по умолчанию —<entityName>_properties_typeProperties_maxConcurrency
. - Свойство
recurrence
также параметризовано. В его разделе все свойства на этом уровне указываются для параметризации в виде строк со значениями по умолчанию и имен параметров. Исключением является свойствоinterval
, параметризованное как типint
. Имя параметра имеет суффикс<entityName>_properties_typeProperties_recurrence_triggerSuffix
. Аналогичным образом свойствоfreq
— это строка, и параметризовано как строка. Однако свойствоfreq
параметризовано без значения по умолчанию. Имя сокращено и имеет суффикс. Например,<entityName>_freq
.
LinkedServices
- Связанные службы уникальны. Так как связанные службы и наборы данных имеют широкий спектр типов, можно указать настройку для конкретного типа. В этом примере для всех связанных служб типа
AzureDataLakeStore
будет применен конкретный шаблон. Для всех остальных (через*
) будет применен другой шаблон. - Свойство
connectionString
будет параметризовано как значениеsecurestring
. Оно не имеет значения по умолчанию У него будет имя сокращенного параметра с суффиксомconnectionString
. - Свойство
secretAccessKey
являетсяAzureKeyVaultSecret
(например, в связанной службе Amazon S3). Оно автоматически параметризовано как секрет Azure Key Vault и получено из настроенного хранилища ключей. Вы также можете параметризовать само хранилище ключей.
Наборы данных
- Хотя настройка для наборов данных доступна для конкретного типа, можно предоставить конфигурацию без явной настройки уровня *. В предыдущем примере все свойства набора данных в разделе
typeProperties
были параметризованными.
Примечание.
Если для конвейера настроены оповещения и матрицы Azure, в настоящее время они не поддерживаются в качестве параметров для развертывания ARM. Для повторного применения оповещений и матриц в новой среде руководствуйтесь статьей Мониторинг, оповещения и матрицы Фабрики данных.
Шаблон параметризации по умолчанию
Ниже приведен текущий шаблон параметризации по умолчанию. Если необходимо добавить только несколько параметров, то рекомендуется изменить этот шаблон напрямую, так как вы не потеряете существующую структуру параметризации.
{
"Microsoft.DataFactory/factories": {
"properties": {
"globalParameters": {
"*": {
"value": "="
}
}
},
"location": "="
},
"Microsoft.DataFactory/factories/globalparameters": {
"properties": {
"*": {
"value": "="
}
}
},
"Microsoft.DataFactory/factories/pipelines": {
},
"Microsoft.DataFactory/factories/dataflows": {
},
"Microsoft.DataFactory/factories/integrationRuntimes":{
"properties": {
"typeProperties": {
"ssisProperties": {
"catalogInfo": {
"catalogServerEndpoint": "=",
"catalogAdminUserName": "=",
"catalogAdminPassword": {
"value": "-::secureString"
}
},
"customSetupScriptProperties": {
"sasToken": {
"value": "-::secureString"
}
}
},
"linkedInfo": {
"key": {
"value": "-::secureString"
},
"resourceId": "="
},
"computeProperties": {
"dataFlowProperties": {
"externalComputeInfo": [{
"accessToken": "-::secureString"
}
]
}
}
}
}
},
"Microsoft.DataFactory/factories/triggers": {
"properties": {
"pipelines": [{
"parameters": {
"*": "="
}
}
],
"pipeline": {
"parameters": {
"*": "="
}
},
"typeProperties": {
"scope": "="
}
}
},
"Microsoft.DataFactory/factories/linkedServices": {
"*": {
"properties": {
"typeProperties": {
"accountName": "=",
"username": "=",
"userName": "=",
"accessKeyId": "=",
"servicePrincipalId": "=",
"userId": "=",
"host": "=",
"clientId": "=",
"clusterUserName": "=",
"clusterSshUserName": "=",
"hostSubscriptionId": "=",
"clusterResourceGroup": "=",
"subscriptionId": "=",
"resourceGroupName": "=",
"tenant": "=",
"dataLakeStoreUri": "=",
"baseUrl": "=",
"database": "=",
"serviceEndpoint": "=",
"batchUri": "=",
"poolName": "=",
"databaseName": "=",
"systemNumber": "=",
"server": "=",
"url":"=",
"functionAppUrl":"=",
"environmentUrl": "=",
"aadResourceId": "=",
"sasUri": "|:-sasUri:secureString",
"sasToken": "|",
"connectionString": "|:-connectionString:secureString",
"hostKeyFingerprint": "="
}
}
},
"Odbc": {
"properties": {
"typeProperties": {
"userName": "=",
"connectionString": {
"secretName": "="
}
}
}
}
},
"Microsoft.DataFactory/factories/datasets": {
"*": {
"properties": {
"typeProperties": {
"folderPath": "=",
"fileName": "="
}
}
}
},
"Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints": {
"properties": {
"*": "="
}
}
}
Пример. Параметризация существующего идентификатора интерактивного кластера Azure Databricks
В следующем примере показано, как добавить одно значение в шаблон параметризации по умолчанию. Нужно только добавить существующий идентификатор интерактивного кластера Azure Databricks для связанной службы Databricks в файле параметров. Обратите внимание, что этот файл совпадает с предыдущим файлом, за исключением добавления existingClusterId
в поле свойства Microsoft.DataFactory/factories/linkedServices
.
{
"Microsoft.DataFactory/factories": {
"properties": {
"globalParameters": {
"*": {
"value": "="
}
}
},
"location": "="
},
"Microsoft.DataFactory/factories/pipelines": {
},
"Microsoft.DataFactory/factories/dataflows": {
},
"Microsoft.DataFactory/factories/integrationRuntimes":{
"properties": {
"typeProperties": {
"ssisProperties": {
"catalogInfo": {
"catalogServerEndpoint": "=",
"catalogAdminUserName": "=",
"catalogAdminPassword": {
"value": "-::secureString"
}
},
"customSetupScriptProperties": {
"sasToken": {
"value": "-::secureString"
}
}
},
"linkedInfo": {
"key": {
"value": "-::secureString"
},
"resourceId": "="
}
}
}
},
"Microsoft.DataFactory/factories/triggers": {
"properties": {
"pipelines": [{
"parameters": {
"*": "="
}
}
],
"pipeline": {
"parameters": {
"*": "="
}
},
"typeProperties": {
"scope": "="
}
}
},
"Microsoft.DataFactory/factories/linkedServices": {
"*": {
"properties": {
"typeProperties": {
"accountName": "=",
"username": "=",
"userName": "=",
"accessKeyId": "=",
"servicePrincipalId": "=",
"userId": "=",
"clientId": "=",
"clusterUserName": "=",
"clusterSshUserName": "=",
"hostSubscriptionId": "=",
"clusterResourceGroup": "=",
"subscriptionId": "=",
"resourceGroupName": "=",
"tenant": "=",
"dataLakeStoreUri": "=",
"baseUrl": "=",
"database": "=",
"serviceEndpoint": "=",
"batchUri": "=",
"poolName": "=",
"databaseName": "=",
"systemNumber": "=",
"server": "=",
"url":"=",
"aadResourceId": "=",
"connectionString": "|:-connectionString:secureString",
"existingClusterId": "-"
}
}
},
"Odbc": {
"properties": {
"typeProperties": {
"userName": "=",
"connectionString": {
"secretName": "="
}
}
}
}
},
"Microsoft.DataFactory/factories/datasets": {
"*": {
"properties": {
"typeProperties": {
"folderPath": "=",
"fileName": "="
}
}
}}
}
Связанный контент
- Обзор непрерывной интеграции и доставки
- Автоматизация непрерывной интеграции с помощью выпусков Azure Pipelines
- Повышение уровня шаблона Resource Manager для каждой среды вручную
- Шаблоны Linked Resource Manager
- Использование рабочей среды исправлений
- Пример скрипта предварительного и после развертывания