1

Я пытаюсь предоставить некоторые сетевые ресурсы в Azure, и я запускаю блокировщик с шагом, который пытается ссылаться на свойство Id ранее созданной подсети.Почему идентификатор для подсети, созданной с помощью командлетов Azure Resource Manager Powershell, null?

Вот команда, чтобы получить подробную информацию подсети:

$gwsubnet = Get-AzureRmVirtualNetworkSubnetConfig -Name 'GatewaySubnet' -VirtualNetwork $vnet

А затем выводит значение $gwsubnet в консоли:

Name : GatewaySubnet Id : Etag : ProvisioningState : AddressPrefix : 10.1.1.0/24 IpConfigurations : null NetworkSecurityGroup : null RouteTable : null

Обратите внимание, что Id свойство равно нулю. Это приводит к ошибке для будущего шага, например:

$gwipconfig = New-AzureRmVirtualNetworkGatewayIpConfig -Name config1 -SubnetId $gwsubnet.Id -PublicIpAddressId $gwpip.Id

Выдает следующую ошибку:

New-AzureRmVirtualNetworkGatewayIpConfig : Cannot validate argument on parameter 'SubnetId'. The argument is null or empty. Supply an argument that is not null or empty and then try the command again. At line:1 char:99 + ... nfig -SubnetId $gwsubnet.Id -PublicIpAddressId $gwpip.Id + ~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [New-AzureRmVirtualNetworkGatewayIpConfig], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Azure.Commands.Network.NewAzureVirtualNetworkGatewayIpConfigCommand

Я изо всех сил с тем, как у меня подсеть имеют Id, возложенные на него , Это что-то, что мне нужно, чтобы выйти/войти снова, чтобы увидеть? Спасибо за помощь.

ответ

4

Проблема, с которой вы сталкиваетесь, заключается в том, что идентификатор подсети не создается до тех пор, пока вы не создали виртуальную сеть.

При запуске Get-AzureRmVirtualNetworkSubnetConfig все вы создаете конфигурацию, чтобы прикрепить к New-AzureRmVirtualNetwork После того, как вы запустили эту команду он будет подключаться к Azure, развернуть VNET, создать подсеть, и в этом состоянии она будет создавать Id подсети.

Следующий код покажет вам, что я имею в виду ...

$DNSNameLabel = "mydnsname" 
$NetworkName = "MyNet" 
$NICName = "MyNIC" 
$PublicIPAddressName = "MyPIP" 
$SubnetName = "MySubnet" 
$SubnetAddressPrefix = "10.0.0.0/24" 
$VnetAddressPrefix = "10.0.0.0/16" 

$SingleSubnet = New-AzureRmVirtualNetworkSubnetConfig ` 
       -Name $SubnetName ` 
       -AddressPrefix $SubnetAddressPrefix 

#At this point nothing is created, so there is no valid subnet id 

$Vnet = New-AzureRmVirtualNetwork -Name $NetworkName ` 
       -ResourceGroupName $ResourceGroupName ` 
       -Location $LocationName ` 
       -AddressPrefix $VnetAddressPrefix ` 
       -Subnet $SingleSubnet 

#vnet and subnet are created, both get an id and etag 

$vnet = Get-AzureRmVirtualNetwork -Name $NetworkName 
       -ResourceGroupName $ResourceGroupName 

$vnet.Subnets[0].Id 

Который даст

/subscriptions/{Subscription ID}/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyNet/subnets/MySubnet