使用Azure Cli或Azure REST API禁用AFD后端池的后端主机

3

我试图将 AFD 后端池的现有后端主机的状态从 Enabled 更新为 Disabled

是否有一种方法可以更新 Azure 前门(Front Door)后端池的现有后端主机?

目前,以下Azure 前门 CLI 文档中只能看到 addlistremove

  • az network front-door backend-pool backend add
  • az network front-door backend-pool backend list
  • az network front-door backend-pool backend remove

是否有用于 update 的命令?

我还查阅了Azure REST API 文档,但没有找到更新 AFD 后端池的后端主机的端点。

azure front door update backend

3个回答

1
我可以使用PowerShell实现您的要求。
以下是脚本: $resourceGroup1 = "frontdoor" $frontDoor1 = "msrini" $afd = Get-AzFrontDoor -ResourceGroupName $resourceGroup1 -name $frontDoor1

$loadBalancingSetting1=$afd.LoadBalancingSettings

$afd.BackendPools.backends[0].EnabledState = "禁用"

$backendpool1=$afd.BackendPools

$frontendEndpoint1 = $afd.FrontendEndpoints

$healthProbeSetting1= $afd.HealthProbeSettings

$routingrule1 = $afd.RoutingRules

$backendpoolsettings1 = $afd.BackendPoolsSetting

使用以下命令设置 AzFrontDoor:Set-AzFrontDoor -Name $frontDoor1 -ResourceGroupName $resourceGroup1 -RoutingRule $routingrule1 -BackendPool $backendpool1 -FrontendEndpoint $frontendEndpoint1 -LoadBalancingSetting $loadBalancingSetting1 -HealthProbeSetting $healthProbeSetting1 -BackendPoolsSetting $backendpoolsettings1。请注意,此命令保留了HTML标签。


1
我已经解决了我的问题,下面的脚本需要使用带有登录服务主体的Azure CLI。
Param(
  [string]$desiredState, #"Enabled" or "Disabled"
  [string]$frontDoorName,
  [string]$resourceGroupName,
  [string]$targetBackendPool,
  [string]$targetBackendHost
)

# Get Access Token
$token = az account get-access-token | ConvertFrom-Json
$accessToken = $token.accessToken
$subscriptionId = $token.subscription
$tenantId = $token.tenant

$uri = "https://management.azure.com/subscriptions/$($subscriptionId)/resourceGroups/$($resourceGroupName)/providers/Microsoft.Network/frontDoors/$($frontDoorName)?api-version=2019-05-01"
$headers = @{ "Authorization" = "Bearer $accessToken" }
$contentType = "application/json"

# Get AFD Configuration.
Write-Host "Invoking Azure REST API to get AFD configuration"
$afdConfig = Invoke-WebRequest -method get -uri $uri -headers $headers | ConvertFrom-Json

# Edit AFD Configuration to toggle backend host state
Write-Host "Checking BackendHost: $targetBackendHost In Backend Pool: $targetBackendPool"

foreach ($backendPool in $afdConfig.properties.backendPools) {
    if ($backendPool.name -eq $targetBackendPool) {
        foreach ($backends in $backendPool.properties.backends) {
            if ($backends.address -eq $targetBackendHost) {
                $currentState = $backends.enabledState
                Write-Host "Current State of $targetBackendHost is $currentState"
                if ($currentState -eq $desiredState) {
                    Write-Host "$targetBackendHost is already in the desired state of $desiredState"
                    exit
                }
                $backends.enabledState = $desiredState
                Write-Host "$targetBackendHost Updated to $desiredState."
           }
        }
    }
}

$updateRequest = $afdConfig | ConvertTo-Json -Depth 100

# Update AFD Configuration.
Write-Host "Invoking Azure REST API to update AFD configuration"
Invoke-WebRequest -method put -uri $uri -headers $headers -ContentType $contentType -body $updateRequest

# Poll current state until the change has been fully propogated in azure
Write-Host "Polling AFD until update is complete."
do {
    $afdConfig = Invoke-WebRequest -method get -uri $uri -headers $headers | ConvertFrom-Json

    foreach ($backendPool in $afdConfig.properties.backendPools) {
        if ($backendPool.name -eq $targetBackendPool) {
            foreach ($backends in $backendPool.properties.backends) {
                if ($backends.address -eq $targetBackendHost) {
                    $currentState = $backends.enabledState
                }
            }
        }
    }
    Write-Host "$targetBackendHost is currently in $currentState"
    Start-Sleep -Seconds 1
} until ($currentState -eq $desiredState)

Write-Host "$targetBackendHost has successfully been updated to $desiredState"

0

我使用 Powershell 完成了它。

$FrontDoor = Get-AzFrontDoor -ResourceGroupName "FrontDoorResourceGroupName" -Name "FrontDoorName"
$FrontDoor.BackendPools.Backends[0].EnabledState = "Disabled"
Set-AzFrontDoor -InputObject $FrontDoor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接