Как изменить виртуальную сеть и подсеть существующего шлюза приложений Azure?
Можно ли переместить уже настроенный шлюз приложения из одной подсети в другую?
На данный момент не видел никакого способа от портала сделать это.
3 ответа
Вы можете использовать этот скрипт для изменения виртуальной сети или подсети. Пожалуйста, проверьте его, чтобы убедиться, что он соответствует вашим потребностям, прежде чем применять его к производственному шлюзу. Кроме того, примите во внимание, что во время изменения будут некоторые простои.
#Login to Azure RM
Login-AzureRmAccount
#Get the Application Gateway config
$gw=Get-AzureRmApplicationGateway -Name GatewayName -ResourceGroupName RGName
#Set the new virtual network and store the config into a new variable
$gw2=Set-AzureRmApplicationGatewayIPConfiguration -SubnetId "/subscriptions/999999-9915-4b1c-accf-0c984bed2311/resourceGroups/RGName/providers/Microsoft.Network/virtualNetworks/NewVirtualNetwork/subnets/default" -ApplicationGateway $gw -Name $gw.GatewayIPConfigurations.name
#Stop the Gateway (you can't change the virtual network / subnet if the Gateway is running)
Stop-AzureRmApplicationGateway -ApplicationGateway $gw
#Set the new config
Set-AzureRmApplicationGateway -ApplicationGateway $gw2
Принятый ответ andresm53 отличный.
Однако, поскольку модуль PowerShell AzureRm постепенно сокращается в пользу более нового модуля Az, вот версия Az (с небольшим улучшением, чтобы избежать необходимости искать идентификатор подсети, чтобы вставить его в код).
Это основано, помимо кода andresm53, также на примере в документации MS.
### Fill in your values ###
$GatewayResourceGroupName = "MyRG1"
$GatewayName = "MyGw"
$VnetResourceGroupName = "MyRG2" #may or may not be the same as $GatewayResourceGroupName
$VNetName = "MyVNet"
$SubnetName = "Subnet1"
###########################
$AppGw = Get-AzApplicationGateway -Name $GatewayName -ResourceGroupName $GatewayResourceGroupName
Stop-AzApplicationGateway -ApplicationGateway $AppGw
$VNet = Get-AzVirtualNetwork -Name $VNetName -ResourceGroupName $VnetResourceGroupName
$Subnet = Get-AzVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $VNet
$AppGw = Set-AzApplicationGatewayIPConfiguration -ApplicationGateway $AppGw -Name $AppGw.GatewayIPConfigurations[0].Name -Subnet $Subnet
Set-AzApplicationGateway -ApplicationGateway $AppGw
Start-AzApplicationGateway -ApplicationGateway $AppGw
Я сделал это с помощью azure cli, необходимо выполнить несколько шагов:
- Остановите шлюз приложений
- Изменить подсеть
- Запустите шлюз приложений (это займет несколько минут)
Используя лазурный cli:
1. остановка шлюза приложений
az network application-gateway stop --subscription YOUR_SUBSCRIPTION_NAME --resource-group YOUR_APP_GATEWAY_RESOURCE_GROUP --name YOUR_APP_GATEWAY_NAME
2. Измените подсеть.
2.1 На этом этапе вам нужно знать ваши текущие данные vnet, заданные следующей командой
az network application-gateway show \
--subscription YOUR_SUBSCRIPTION_NAME \
--resource-group YOUR_APP_GATEWAY_RESOURCE_GROUP \
--name YOUR_APP_GATEWAY_NAME
Необходимый нам вывод находится в разделе JSON gatewayIpConfigurations.
[
{
"etag": "REDACTED",
"id": "REDACTED",
"name": "REDACTED",
"provisioningState": "REDACTED",
"resourceGroup": "REDACTED",
"subnet": {
"id": "/subscriptions/REDACTED/resourceGroups/REDACTED/providers/Microsoft.Network/virtualNetworks/YOUR_CURRENT_VNET/subnets/YOUR_CURRENT_SUBNET",
"resourceGroup": "REDACTED"
},
"type": "Microsoft.Network/applicationGateways/gatewayIPConfigurations"
}
]
2.2 Чтобы изменить подсеть, вам необходимо изменить YOUR_CURRENT_SUBNET на новую подсеть
[
{
"etag": "REDACTED",
"id": "REDACTED",
"name": "REDACTED",
"provisioningState": "REDACTED",
"resourceGroup": "REDACTED",
"subnet": {
"id": "/subscriptions/REDACTED/resourceGroups/REDACTED/providers/Microsoft.Network/virtualNetworks/YOUR_CURRENT_VNET/subnets/YOUR_NEW_SUBNET",
"resourceGroup": "REDACTED"
},
"type": "Microsoft.Network/applicationGateways/gatewayIPConfigurations"
}
]
2.3 скопируйте предыдущую структуру JSON (в строковом формате), поместите правильный subnet.id, который вы хотите сейчас, и обновите его
az network application-gateway update \
--subscription YOUR_SUBSCRIPTION_NAME \
--resource-group YOUR_APP_GATEWAY_RESOURCE_GROUP \
--name YOUR_APP_GATEWAY_NAME \
--set gatewayIpConfigurations[0].subnet.id='[{"etag":"REDACTED","id":"REDACTED","name":"REDACTED","provisioningState":"REDACTED","resourceGroup":"REDACTED","subnet":{"id":"/subscriptions/REDACTED/resourceGroups/REDACTED/providers/Microsoft.Network/virtualNetworks/YOUR_CURRENT_VNET/subnets/YOUR_NEW_SUBNET","resourceGroup":"REDACTED"},"type":"Microsoft.Network/applicationGateways/gatewayIPConfigurations"}]'
3. Запустите шлюз приложений.
az network application-gateway start \
--subscription YOUR_SUBSCRIPTION_NAME \
--resource-group YOUR_APP_GATEWAY_RESOURCE_GROUP \
--name YOUR_APP_GATEWAY_NAME
Вы не можете изменить связь подсети / виртуальной сети на работающем шлюзе. Сначала он должен быть в остановленном состоянии. Кроме того, VIP на шлюзе будет меняться после запуска после обновления. Перемещение подсети может быть выполнено через PowerShell/CLI и в настоящее время не поддерживается порталом.
Это повлияет на внешний IP-адрес. так как шлюз приложения должен использовать динамический IP-адрес. как только шлюз приложения остановится. внешний IP-адрес освободится, и у вас будет новый после его запуска.