GlobalParametersUpdateScript.ps1重置ADF公网访问配置问题
ADF CI/CD更新全局参数时网络配置被重置为公共端点问题
我配置了Azure Data Factory(简称ADF)CI/CD流水线,所用的ADF实例配置了多个全局参数,因此参照官方文档开展全局参数的CI/CD配置。文档页面提供了如下用于更新全局参数的PowerShell脚本,运行时出现异常:每次运行该脚本,都会将ADF的网络访问配置从private endpoint(专用端点)重置为Public endpoint(公共端点)。
param ( [parameter(Mandatory = $true)] [String] $globalParametersFilePath, [parameter(Mandatory = $true)] [String] $resourceGroupName, [parameter(Mandatory = $true)] [String] $dataFactoryName ) Import-Module Az.DataFactory $newGlobalParameters = New-Object 'system.collections.generic.dictionary[string,Microsoft.Azure.Management.DataFactory.Models.GlobalParameterSpecification]' Write-Host "Getting global parameters JSON from: " $globalParametersFilePath $globalParametersJson = Get-Content $globalParametersFilePath Write-Host "Parsing JSON..." $globalParametersObject = [Newtonsoft.Json.Linq.JObject]::Parse($globalParametersJson) # $gp in $factoryFileObject.properties.globalParameters.GetEnumerator()) # may be used in case you use non-standard location for global parameters. It is not recommended. foreach ($gp in $globalParametersObject.GetEnumerator()) { Write-Host "Adding global parameter:" $gp.Key $globalParameterValue = $gp.Value.ToObject([Microsoft.Azure.Management.DataFactory.Models.GlobalParameterSpecification]) $newGlobalParameters.Add($gp.Key, $globalParameterValue) } $dataFactory = Get-AzDataFactoryV2 -ResourceGroupName $resourceGroupName -Name $dataFactoryName $dataFactory.GlobalParameters = $newGlobalParameters Write-Host "Updating" $newGlobalParameters.Count "global parameters." Set-AzDataFactoryV2 -InputObject $dataFactory -Force
需求为让ADF始终通过*Private endpoint(专用端点)*提供网络访问,确认是否有其他开发者遇到过同类问题。

问题原因
这是旧版Az.DataFactory PowerShell模块的已知缺陷:旧版本中Get-AzDataFactoryV2 cmdlet返回的ADF实例对象未完整携带公网访问开关、专用端点关联等网络配置属性,调用Set-AzDataFactoryV2做全量资源更新时,缺失的网络配置字段会被服务端默认赋值为公共端点访问模式,最终导致原有专用端点配置被重置。
解决方案
- 优先将流水线运行环境、本地环境安装的
Az.DataFactory模块升级到最新版本,新版本已修复该对象属性缺失的问题,更新全局参数时会自动保留原有网络配置:# 升级Az.DataFactory模块 Update-Module Az.DataFactory -Force - 若受环境限制无法升级模块,可直接修改更新脚本,在执行
Set-AzDataFactoryV2前显式指定公网访问状态为禁用,避免配置被覆盖:$dataFactory = Get-AzDataFactoryV2 -ResourceGroupName $resourceGroupName -Name $dataFactoryName $dataFactory.GlobalParameters = $newGlobalParameters # 显式禁用公网访问,强制保留专用端点访问模式 $dataFactory.PublicNetworkAccess = 'Disabled' Write-Host "Updating" $newGlobalParameters.Count "global parameters." Set-AzDataFactoryV2 -InputObject $dataFactory -Force - 如果ADF还配置了公网IP白名单、VNet注入等额外网络规则,升级模块后建议先在测试环境验证更新逻辑,确认所有网络属性都能被正常保留后再上线到生产流水线。
内容的提问来源于stack exchange,提问作者Aniket Karajgikar
相关产品推荐
相关产品推荐

