Как использовать команды Set с AzureRM и шлюзом приложений? - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь выполнить следующие команды, чтобы изменить настройки существующего правила в моем шлюзе приложений Azure:

    $updatedAppGW = Set-AzureRmApplicationGatewayRequestRoutingRule -ApplicationGateway $AppGW `
        -Name $ChosenSubscription.httpsRule `
        -RuleType Basic `
        -BackendAddressPool $backendPool `
        -BackendHttpSettings $httpSettings

    # Save Gateway configuration
    Write-Host "[$(__LINE__)]  Attempting to save changes to the Application Gateway..." -ForegroundColor Cyan
    Set-AzureRmApplicationGateway -ApplicationGateway $updatedAppGW | Out-Null

Set-AzureRmApplicationGatewayRequestRoutingRuleПохоже, что команда работает правильно (по крайней мере, без вывода сообщений).

Однако, когда я пытаюсь «сохранить» конфигурацию шлюза приложений с помощью команды Set-AzureRmApplicationGateway, я получаю сообщение об ошибке Set-AzureRmApplicationGateway : Object reference not set to an instance of an object.

Console output

Я думаю, это потому, что я не правильно использую эти команды "Set".

Я прочитал в Интернете, что когда я запускаю Set-AzureRmApplicationGatewayRequestRoutingRule,Я на самом деле внослю изменения только в локальную память.Затем я должен сохранить изменения шлюза приложений.

Это правда?Если так ... как мне на самом деле сохранить конфигурацию шлюза приложений в этом контексте?Ранее в моем скрипте при использовании команд Add-AzureRm (например, Add-AzureRmApplicationGatewayBackendAddressPool) я немедленно (в следующей строке) запустил Set-AzureRmApplicationGateway, и он работал как положено.

Я также пытался изменитьКоманда Set-AzureRmApplicationGateway в блоке кода в верхней части этого поста, чтобы использовать мою исходную переменную $AppGW вместо этой переменной $updatedAppGW, которую я думаю, производит моя Set-AzureRmApplicationGatewayRequestRoutingRule команда.Ни один из них не работает - идентичная ошибка.

РЕДАКТИРОВАТЬ: дополнительная диагностика

Добавление следующего вывода Write-Host ...

    Write-Host "[$(__LINE__)]  Retrieved AG Rule '$($rule.Name)'." -ForegroundColor Magenta
    Write-Host "[$(__LINE__)]  Attempting to change this rule to point at Backend Address Pool '$($backendPool.Name)' and HTTP Settings '$($httpSettings.Name)'..." -ForegroundColor Cyan

    # Re-retrieve the Application Gateway after saving it earlier
    $AppGW = Get-AzureRmApplicationGateway -Name $ChosenSubscription.appGateway -ResourceGroupName $ChosenSubscription.resourceGroup

    # Re-retrieve the Backend Address Pool and HTTP Settings that we've created, for the sake of updating the rule
    $backendPool = Get-AzureRmApplicationGatewayBackendAddressPool -ApplicationGateway $AppGW -Name $MaintenanceToggleBackendPool
    $httpSettings = Get-AzureRmApplicationGatewayBackendHttpSettings -ApplicationGateway $AppGW -Name $MaintenanceToggleHTTPSetting

    Write-Host "[$(__LINE__)]  `$AppGW.Name $($AppGW.Name)" -ForegroundColor Green
    Write-Host "[$(__LINE__)]  `$AppGW.ProvisioningState $($AppGW.ProvisioningState)" -ForegroundColor Green
    Write-Host "[$(__LINE__)]  `$AppGW.OperationalState $($AppGW.OperationalState)" -ForegroundColor Green

    $updatedAppGW = Set-AzureRmApplicationGatewayRequestRoutingRule -ApplicationGateway $AppGW `
        -Name $ChosenSubscription.httpsRule `
        -RuleType Basic `
        -BackendAddressPool $backendPool `
        -BackendHttpSettings $httpSettings

    Write-Host "[$(__LINE__)]  `$updatedAppGW.Name $($updatedAppGW.Name)" -ForegroundColor Green
    Write-Host "[$(__LINE__)]  `$updatedAppGW.ProvisioningState $($updatedAppGW.ProvisioningState)" -ForegroundColor Green
    Write-Host "[$(__LINE__)]  `$updatedAppGW.OperationalState $($updatedAppGW.OperationalState)" -ForegroundColor Green

    # Save Gateway configuration
    Write-Host "[$(__LINE__)]  Attempting to save changes to the Application Gateway..." -ForegroundColor Cyan
    Set-AzureRmApplicationGateway -ApplicationGateway $updatedAppGW | Out-Null

... дает следующий вывод консоли:

Console output for further diagnosis

1 Ответ

0 голосов
/ 23 октября 2018

ОК, удалось решить проблему самостоятельно ... вздох

В команде Set-AzureRmApplicationGatewayRequestRoutingRule вы должны указать параметр -HttpListener илимолча произойдет сбой.

    # Re-retrieve the Backend Address Pool and HTTP Settings that we've created, for the sake of updating the rule
    $backendPool = Get-AzureRmApplicationGatewayBackendAddressPool -ApplicationGateway $AppGW -Name $MaintenanceToggleBackendPool
    $httpSettings = Get-AzureRmApplicationGatewayBackendHttpSettings -ApplicationGateway $AppGW -Name $MaintenanceToggleHTTPSetting
    $httpListener = Get-AzureRmApplicationGatewayHttpListener -ApplicationGateway $AppGW -Name "HttpListenerTest"

    $updatedAppGW = Set-AzureRmApplicationGatewayRequestRoutingRule -ApplicationGateway $AppGW `
        -Name $ChosenSubscription.httpsRule `
        -RuleType Basic `
        -BackendAddressPool $backendPool `
        -BackendHttpSettings $httpSettings `
        -HttpListener $httpListener

Вот почему команда Set-AzureRmApplicationGateway не работала должным образом - в ее памяти был поврежден RequestRoutingRule.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...