azure-data-factory #azure-resource-manager #azure-bicep
#azure-data-factory #azure-resource-manager #azure-bicep
Вопрос:
Я пытаюсь создать модуль bicep, который будет развертывать фабрику данных вместе с управляемой виртуальной сетью. Вот что у меня есть:
param dfName string
param sqlId string
resource df 'Microsoft.DataFactory/factories@2018-06-01' = {
name: dfName
location: resourceGroup().location
identity: {
type: 'SystemAssigned'
}
}
resource integrationRuntime 'Microsoft.DataFactory/factories/integrationRuntimes@2018-06-01' = {
name: '${dfName}/managedVnetIr'
properties: {
type: 'Managed'
typeProperties: {
computeProperties: {
location: 'AutoResolve'
dataFlowProperties: {
computeType: 'General'
coreCount: 8
timeToLive: 0
}
}
}
}
dependsOn: [
df
]
}
resource managedVnet 'Microsoft.DataFactory/factories/managedVirtualNetworks@2018-06-01' = {
name: '${dfName}/vnet'
properties: {
}
dependsOn: [
integrationRuntime
]
}
resource managedPrivateEndpoint 'Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints@2018-06-01' = {
name: '${dfName}/vnet/pe'
properties: {
privateLinkResourceId:sqlId
groupId: 'sql'
}
dependsOn: [
managedVnet
]
}
output dfId string = df.identity.principalId
При запуске этого модуля я получаю следующую ошибку:
«статус»: «Сбой», «ошибка»: { «код»: «Ресурс не найден», «сообщение»: «Ресурс не найден. Идентификатор ресурса: ‘/subscriptions/8210b2ab-404f-40a5-baba-1cde6d89c670/resourceGroups/rg-contactcentre-dev-001/providers/Microsoft.DataFactory/factories/df-ccsurvey-dev-001/managedvirtualnetworks/vnet’. » }
Я также попробовал следующее (на основе ответа от AnsumanBal-MT)
param dfName string
param sqlId string
param vnetName string
resource df 'Microsoft.DataFactory/factories@2018-06-01' = {
name: dfName
location: resourceGroup().location
identity: {
type: 'SystemAssigned'
}
}
resource integrationRuntime 'Microsoft.DataFactory/factories/integrationRuntimes@2018-06-01' = {
parent: df
name: '${dfName}-managedVnetIr'
properties: {
type: 'Managed'
typeProperties: {
computeProperties: {
location: 'AutoResolve'
dataFlowProperties: {
computeType: 'General'
coreCount: 8
timeToLive: 0
}
}
}
}
}
resource managedVnet 'Microsoft.DataFactory/factories/managedVirtualNetworks@2018-06-01' = {
parent:df
name: vnetName
properties: {
}
dependsOn: [
integrationRuntime
]
}
resource managedPrivateEndpoint 'Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints@2018-06-01' = {
parent:managedVnet
name: '${vnetName}-sql-pe'
properties: {
privateLinkResourceId:sqlId
groupId: 'sql'
}
dependsOn: [
managedVnet
]
}
output dfId string = df.identity.principalId
но это выдает следующую ошибку:
{ «статус»: «Сбой», «ошибка»: { «код»: «ResourceDeploymentFailure», «сообщение»: «Операция с ресурсом завершена с состоянием подготовки терминала «Сбой»». } }
Кто-нибудь может определить, что я сделал неправильно, или направить меня к рабочему образцу, пожалуйста?
Комментарии:
1. Привет, @Rob Bowman, я протестировал базу данных SQL и добавил обновление для ответа, пожалуйста, дайте мне знать, если это сработает..
2. Привет, @Rob Bowman, я обновил код в соответствии с вашим сценарием и необходимыми конфигурациями. Я протестировал его, и он был успешно развернут . Пожалуйста, используйте весь код, который я предоставил в разделе обновление : 2 . Он создаст виртуальную сеть, затем sql server и adf и, наконец, управляемую частную конечную точку для sql в adf.
Ответ №1:
Для создания управляемой виртуальной сети на фабрике данных необходимо сослаться на существующую виртуальную сеть в вашей группе ресурсов.
Обновление: 1
При тестировании создания управляемой частной конечной точки для базы данных sql я столкнулся с той же ошибкой, что и вы, используя ваш код, он не удался через 1 час 18 минут при сбое инициализации.
Когда я тестировал SQL server, я обнаружил две проблемы, которые groupId
должны быть sqlServer
, а также управляемая виртуальная сеть для adf не сможет взаимодействовать с sql Server, поскольку она не добавлена firewall and virtual networks
.
Для решения проблемы необходимо выполнить следующие два шага :
- Если вы ссылаетесь
Microsoft.SQL/Servers
, пожалуйста, измените идентификатор группы наsqlServer
, и если вы ссылаетесь на «Microsoft.Synapse / Workspaces», вы можете сохранить его какsql
. Вы можете обратиться к этому документу Microsoft для получения имени вложенных ресурсов частной конечной точки. - Пожалуйста, добавьте существующую виртуальную сеть, которую вы используете для создания управляемой виртуальной сети для ADF на сервере SQL . (Если вы ссылаетесь на synapse, перейдите в Synapse>> Сеть>> Разрешить службам и ресурсам Azure доступ к этой рабочей области)
После выполнения вышеуказанных 2 шагов развертывание завершится успешно.
Обновление: 2
Сценарий: создайте сервер SQL с виртуальной сетью, а затем обратитесь к виртуальной сети и sql для создания виртуальной сети, управляемой adf, и частной конечной точки.
Пожалуйста, используйте приведенный ниже код, который я протестировал в соответствии с вашими требованиями :
param serverName string = uniqueString('sql', resourceGroup().id)
param sqlDBName string = 'SampleDB'
param administratorLogin string
@secure()
param administratorLoginPassword string
param virtualNetworkName string = 'azure_mysql_vnet'
param subnetName string = 'azure_mysql_subnet'
param virtualNetworkRuleName string = 'AllowSubnet'
param vnetAddressPrefix string = '10.0.0.0/16'
param subnetPrefix string = '10.0.0.0/16'
param dfName string
resource virtualNetworkName_resource 'Microsoft.Network/virtualNetworks@2020-06-01' = {
name: virtualNetworkName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
vnetAddressPrefix
]
}
}
}
resource virtualNetworkName_subnetName 'Microsoft.Network/virtualNetworks/subnets@2020-06-01' = {
parent: virtualNetworkName_resource
name: subnetName
location: resourceGroup().location
properties: {
addressPrefix: subnetPrefix
}
}
resource serverName_resource 'Microsoft.Sql/servers@2020-02-02-preview' = {
name: serverName
location: resourceGroup().location
properties: {
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
}
}
resource serverName_sqlDBName 'Microsoft.Sql/servers/databases@2020-08-01-preview' = {
parent: serverName_resource
name: sqlDBName
location: resourceGroup().location
sku: {
name: 'Standard'
tier: 'Standard'
}
}
resource serverName_virtualNetworkRuleName 'Microsoft.Sql/servers/virtualNetworkRules@2021-02-01-preview' = {
parent: serverName_resource
name: virtualNetworkRuleName
properties: {
virtualNetworkSubnetId: virtualNetworkName_subnetName.id
ignoreMissingVnetServiceEndpoint: true
}
}
resource df 'Microsoft.DataFactory/factories@2018-06-01' = {
name: dfName
location: resourceGroup().location
identity: {
type: 'SystemAssigned'
}
}
resource integrationRuntime 'Microsoft.DataFactory/factories/integrationRuntimes@2018-06-01' = {
parent: df
name: '${dfName}-managedVnetIr'
properties: {
type: 'Managed'
typeProperties: {
computeProperties: {
location: 'AutoResolve'
dataFlowProperties: {
computeType: 'General'
coreCount: 8
timeToLive: 0
}
}
}
}
}
resource managedVnet 'Microsoft.DataFactory/factories/managedVirtualNetworks@2018-06-01' = {
parent:df
name: virtualNetworkName
properties: {
}
dependsOn: [
integrationRuntime
]
}
resource managedPrivateEndpoint 'Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints@2018-06-01' = {
parent:managedVnet
name: '${virtualNetworkName}-${serverName}-pe'
properties: {
privateLinkResourceId: serverName_resource.id
groupId: 'sqlServer'
}
dependsOn: [
managedVnet
]
}
Вывод:
Примечание: После успешного развертывания необходимо вручную утвердить запрос частной конечной точки, который находится в состоянии ожидания, от SQL Server, как показано ниже:
Комментарии:
1. Я внес поправку, как вы предложили. Теперь мой модуль bicep получает имя существующей виртуальной сети и использует его в свойстве name управляемого ресурса виртуальной сети. Развертывание выполнялось в течение 1 часа 18 минут, но не удалось при развертывании типа «managedPrivateEndpoints» с ошибкой: операция с ресурсом завершена с состоянием подготовки терминала «Сбой».
2. Привет, он развертывает конечную точку для sql. Идентификатор sql — это выходные данные модуля bicep, который вызывается ранее в последовательности для создания экземпляра sql: resource sqlServerName_resource ‘Microsoft.Sql/servers@2015-05-01-preview ‘ = { имя: sqlServerName местоположение: ResourceGroup().свойства местоположения: { administratorLogin: sqlAdminUsername administratorLoginPassword: sqlAdminPwd } } вывод строки sqlId = sqlServerName_resource.id
3. Привет @AnsumanBal-MT, боюсь, это не сработает. Пожалуйста, посмотрите мой первый комментарий в ответ на ваш ответ
4. @RobBowman, я обновил ответ новым кодом и обновил несколько шагов, которые необходимо выполнить после развертывания SQL .. позвольте мне попробовать с последовательным развертыванием и тем, что необходимо настроить при развертывании SQL server, а также после этого я попробую развернуть adf с управляемой частной конечной точкой для SQL server в качестве вспомогательного ресурса. Я постараюсь обновить вас после тестирования.. Дайте мне знать, если я ошибаюсь в сценарии, который вы пытаетесь..
5. Я думаю, вы правы в сценарии. У меня есть «основной» шаблон bicep, который получает имя уже существующей виртуальной сети в качестве параметра. Main вызывает шаблон «Sql», когда возвращает идентификатор созданного экземпляра sql. Затем он передает это вместе с именем виртуальной сети в шаблон bicep «DataFactory», который пытается создать: фабрику данных, среду выполнения интеграции, управляемую виртуальную сеть, управляемую частную конечную точку