排查 Azure Microsoft.Network 失败预配状态的原因

本文可帮助你了解 Microsoft.Network 资源的各种预配状态的含义。 你可以有效排查状态为“失败”的情况。

预配状态

预配状态是用户对 Azure 资源管理器资源发起的控制平面操作的状态。

正在设置状态 说明
更新 正在创建或更新资源。
失败 对资源的上次操作失败。
成功 对资源的上次操作成功。
正在删除 正在删除资源。
迁移 从 Azure Service Manager 迁移到 Azure 资源管理器时显示。

这些状态是资源的元数据属性。 它们与资源本身的功能无关。 处于失败状态并不一定意味着资源无法正常运行。 在大多数情况下,它可以继续运行和处理流量,而不会出现问题。

在某些情况下,如果资源处于失败状态,对资源或依赖于该资源的其他资源进行的其他操作可能会失败。 在运行其他操作之前,需要将状态恢复为成功。

例如,如果有个依赖的 VirtualNetworkGatewayConnection 对象处于失败状态,则无法对 VirtualNetworkGateway 运行操作。

通过 PUT 操作恢复成功状态

若要恢复成功状态,请对资源运行另一个写入 (PUT) 操作。

导致上一个操作的问题可能不再是当前的问题。 新的写入操作应能够成功并恢复预配状态。

完成此任务最简单的方法是使用 Azure PowerShell。 发出特定于资源的 Get 命令,以提取资源的当前所有配置。 接下来,运行 Set 命令(或等效命令),根据当前配置,向 Azure 提交包含所有资源属性的写入操作。

重要

  • 在不首先运行 Get 的情况下对资源运行 Set 命令会导致使用默认设置覆盖资源。 这些设置可能与你当前配置的设置不同。 除非打算重置为默认值,否则不要只运行 Set 命令。
  • 通过第三方软件或任何使用较旧 API 版本的工具运行 GetSet 操作也可能导致丢失某些设置。 运行命令所用的 API 版本中可能不存在这些设置。

使用 Azure PowerShell cmdlet 恢复成功预配状态

本文中的步骤和示例使用 Azure PowerShell Az 模块。 若要在计算机上本地安装 Az 模块,请参阅安装 Azure PowerShell。 若要详细了解新 Az 模块,请参阅新 Azure Powershell Az 模块简介。 PowerShell cmdlet 经常更新。 如果未运行最新版本,在说明中指定的值可能无法使用。 若要在系统上查找已安装的 PowerShell 版本,请使用 Get-Module -ListAvailable Az cmdlet。

前期操作

  1. 安装最新版本的 Azure 资源管理器 PowerShell cmdlet。 有关详细信息,请查看安装 Azure Az PowerShell 模块

  2. 使用提升的权限打开 PowerShell 控制台,并连接到帐户。 使用下面的示例来帮助连接:

    Connect-AzAccount -Environment AzureChinaCloud
    
  3. 如果有多个 Azure 订阅,请查看该帐户的订阅。

    Get-AzSubscription
    
  4. 指定要使用的订阅。

    Select-AzSubscription -SubscriptionName "Replace_with_your_subscription_name"
    
  5. 运行以下部分中特定于资源的命令以重置预配状态。

注意

本文中的每个示例命令都使用 your_resource_name 作为资源名称,使用 your_resource_group_name 作为资源组名称。 请确保将这些字符串替换为相应的资源和资源组名称以进行部署。

Microsoft.Network/applicationGateways

Get-AzApplicationGateway -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzApplicationGateway

Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies

Get-AzApplicationGatewayFirewallPolicy -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzApplicationGatewayFirewallPolicy

Microsoft.Network/azureFirewalls

Get-AzFirewall -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzFirewall

Microsoft.Network/bastionHosts

$bastion = Get-AzBastion -Name "your_resource_name" -ResourceGroupName "your_resource_group_name"
Set-AzBastion -InputObject $bastion

Microsoft.Network/connections

Get-AzVirtualNetworkGatewayConnection -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzVirtualNetworkGatewayConnection

Microsoft.Network/expressRouteCircuits

Get-AzExpressRouteCircuit -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzExpressRouteCircuit

Microsoft.Network/expressRouteGateways

Get-AzExpressRouteGateway -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzExpressRouteGateway

注意

虚拟 WAN 中部署了 Microsoft.Network/expressRouteGateways。 如果虚拟网络中有独立 ExpressRoute 网关,请运行与 Microsoft.Network/virtualNetworkGateways 相关的命令。

Microsoft.Network/expressRoutePorts

Get-AzExpressRoutePort -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzExpressRoutePort

Microsoft.Network/firewallPolicies

Get-AzFirewallPolicy -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzFirewallPolicy

Microsoft.Network/loadBalancers

Get-AzLoadBalancer -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzLoadBalancer

Microsoft.Network/localNetworkGateways

Get-AzLocalNetworkGateway -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzLocalNetworkGateway

Microsoft.Network/natGateways

Get-AzNatGateway -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzNatGateway

Microsoft.Network/networkInterfaces

Get-AzNetworkInterface -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzNetworkInterface

Microsoft.Network/networkSecurityGroups

Get-AzNetworkSecurityGroup -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzNetworkSecurityGroup

Microsoft.Network/networkVirtualAppliances

Get-AzNetworkVirtualAppliance -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Update-AzNetworkVirtualAppliance

注意

大多数与虚拟 WAN 相关的资源(例如 networkVirtualAppliances)使用 Update cmdlet 而不是 Set 进行写入操作。

Microsoft.Network/privateDnsZones

Get-AzPrivateDnsZone -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzPrivateDnsZone

Microsoft.Network/privateEndpoints

Get-AzPrivateEndpoint -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzPrivateEndpoint

Microsoft.Network/privateLinkServices

Get-AzPrivateLinkService -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzPrivateLinkService

Microsoft.Network/publicIpAddresses

Get-AzPublicIpAddress -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzPublicIpAddress

Microsoft.Network/routeFilters

Get-AzRouteFilter -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzRouteFilter

Microsoft.Network/routeTables

Get-AzRouteTable -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzRouteTable

Microsoft.Network/virtualHubs

Get-AzVirtualHub -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Update-AzVirtualHub

注意

大多数与虚拟 WAN 相关的资源(例如 virtualHubs)使用 Update cmdlet 而不是 Set 进行写入操作。

Microsoft.Network/virtualNetworkGateways

Get-AzVirtualNetworkGateway -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzVirtualNetworkGateway

Microsoft.Network/virtualNetworks

Get-AzVirtualNetwork -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Set-AzVirtualNetwork

Microsoft.Network/virtualWans

Get-AzVirtualWan -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Update-AzVirtualWan

注意

大多数与虚拟 WAN 相关的资源(例如 virtualWans)使用 Update cmdlet 而不是 Set 进行写入操作。

Microsoft.Network/vpnGateways

Get-AzVpnGateway -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Update-AzVpnGateway

注意

  • 虚拟 WAN 中部署了 Microsoft.Network/vpnGateways。 如果虚拟网络中有独立 VPN 网关,请运行与 Microsoft.Network/virtualNetworkGateways 相关的命令。
  • 大多数与虚拟 WAN 相关的资源(例如 vpnGateways)使用 Update cmdlet 而不是 Set 进行写入操作。

Microsoft.Network/vpnSites

Get-AzVpnSite -Name "your_resource_name" -ResourceGroupName "your_resource_group_name" | Update-AzVpnSite

注意

大多数与虚拟 WAN 相关的资源(例如 vpnSites)使用 Update cmdlet 而不是 Set 进行写入操作。

后续步骤

如果运行的命令未解决失败状态问题,应返回错误代码。 大多数错误代码都包含对可能出现的问题的详细说明,并提供解决问题的提示。

如果仍然存在问题,请通过 Azure 支持创建支持票证。 向支持代理指定在最新操作中收到的错误代码和运行操作时的时间戳。