如何使用Azure.ResourceManager库在.NET中更新Azure应用网关?
Azure应用网关完整配置更新示例(Azure.ResourceManager库)
问题说明
ApplicationGatewayResource.UpdateAsync(new())仅支持标签更新,无法修改网关核心配置(如SSL证书、路由规则等)。要实现完整配置更新,可采用以下两种方式:
方式1:补丁更新(推荐)
通过构建ApplicationGatewayPatch对象,仅指定需要修改的属性,避免覆盖未变更的配置:
// 1. 获取目标应用网关资源 var appGatewayId = ResourceIdentifier.Parse(_configuration["Azure:ApplicationGatewayId"]); ApplicationGatewayResource appGateway = await _armClient.GetApplicationGatewayResource(appGatewayId).GetAsync(); // 2. 构建补丁对象,复制原有SSL证书集合(防止丢失已有证书) var patch = new ApplicationGatewayPatch(appGateway.Data.Location) { SslCertificates = new List<ApplicationGatewaySslCertificate>(appGateway.Data.SslCertificates) }; // 3. 添加新的SSL证书 patch.SslCertificates.Add(new ApplicationGatewaySslCertificate { Name = name, Data = BinaryData.FromBytes(pfx), // 根据pfx字节数组调整,若为文件需先读取为字节 Password = pfxPassword }); // 4. 执行更新操作并等待完成 var updateOperation = await appGateway.UpdateAsync(WaitUntil.Completed, patch); ApplicationGatewayResource updatedAppGateway = updateOperation.Value;
方式2:完整配置覆盖
若需要替换整个网关配置,可使用BeginCreateOrUpdateAsync方法,传入修改后的完整ApplicationGatewayData对象:
// 1. 获取目标应用网关资源 var appGatewayId = ResourceIdentifier.Parse(_configuration["Azure:ApplicationGatewayId"]); ApplicationGatewayResource appGateway = await _armClient.GetApplicationGatewayResource(appGatewayId).GetAsync(); // 2. 修改现有配置数据 var updatedData = appGateway.Data; updatedData.SslCertificates.Add(new ApplicationGatewaySslCertificate { Name = name, Data = BinaryData.FromBytes(pfx), Password = pfxPassword }); // 3. 执行创建/更新操作(网关存在则更新,不存在则创建) var operation = await appGateway.BeginCreateOrUpdateAsync(WaitUntil.Completed, updatedData); ApplicationGatewayResource updatedAppGateway = operation.Value;
关键指导
- 集合属性处理:修改
SslCertificates、RequestRoutingRules等集合类属性时,需复制原有集合再进行增删改,避免直接覆盖导致丢失原有配置。 - 权限要求:确保执行操作的身份拥有
Application Gateway Contributor或等效Azure权限。 - 异步操作等待:使用
WaitUntil.Completed确保更新操作完全完成后再处理结果,避免数据不一致。 - 只读属性注意:
appGateway.Data部分属性为只读,修改时需通过补丁对象或复制后修改完整数据对象实现。
内容的提问来源于stack exchange,提问作者frank_lbt
相关产品推荐
相关产品推荐

