Skapa ett nätverk för flernivåprogram – skriptexempelCreate a network for multi-tier applications script sample

Det här skriptexemplet skapar ett virtuellt nätverk med klient- och serverdelsundernät.This script sample creates a virtual network with front-end and back-end subnets. Trafik till klientdelsundernätet är begränsad till HTTP och SSH, medan trafik till serverdelsundernätet är begränsad till MySQL, port 3306.Traffic to the front-end subnet is limited to HTTP and SSH, while traffic to the back-end subnet is limited to MySQL, port 3306. När du kört skriptet har du två virtuella datorer, en i varje undernät, som du kan distribuera webbservern och MySQL-programvaran till.After running the script, you will have two virtual machines, one in each subnet that you can deploy web server and MySQL software to.

Du kan köra skriptet från Azure Cloud Shell, eller från en lokal installation av PowerShell.You can execute the script from the Azure Cloud Shell, or from a local PowerShell installation. Om du använder PowerShell lokalt kräver det här skriptet version 1.0.0 eller senare av Azure PowerShell-modulen.If you use PowerShell locally, this script requires the Azure PowerShell module version 1.0.0 or later. Kör Get-Module -ListAvailable Az för att hitta den installerade versionen.To find the installed version, run Get-Module -ListAvailable Az. Om du behöver uppgradera kan du läsa Install Azure PowerShell module (Installera Azure PowerShell-modul).If you need to upgrade, see Install Azure PowerShell module. Om du kör PowerShell lokalt måste du också köra Connect-AzAccount för att skapa en anslutning till Azure.If you are running PowerShell locally, you also need to run Connect-AzAccount to create a connection with Azure.

Om du inte har en Azure-prenumerationkan du skapa ett kostnads fritt konto innan du börjar.If you don't have an Azure subscription, create a free account before you begin.

ExempelskriptSample script

Anteckning

Den här artikeln har uppdaterats till att använda Azure Az PowerShell-modulen.This article has been updated to use the Azure Az PowerShell module. Az PowerShell-modulen är den rekommenderade PowerShell-modulen för att interagera med Azure.The Az PowerShell module is the recommended PowerShell module for interacting with Azure. För att komma igång med Az PowerShell kan du läsa artikeln om att installera Azure PowerShell.To get started with the Az PowerShell module, see Install Azure PowerShell. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.To learn how to migrate to the Az PowerShell module, see Migrate Azure PowerShell from AzureRM to Az.

Ett undernäts-ID tilldelas när du har skapat ett virtuellt nätverk, mer specifikt med hjälp av cmdleten New-AzVirtualNetwork med alternativet -Subnet (Undernät).A subnet ID is assigned after you have created a virtual network; specifically, using the New-AzVirtualNetwork cmdlet with the -Subnet option. Om du konfigurerar undernätet med hjälp av cmdleten New-AzVirtualNetworkSubnetConfig före anropet till New-AzVirtualNetwork ser du inte undernäts-ID förrän du har anropat New-AzVirtualNetwork.If you configure the subnet using the New-AzVirtualNetworkSubnetConfig cmdlet before the call to New-AzVirtualNetwork, you won't see the subnet ID until after you call New-AzVirtualNetwork.

# Variables for common values
$rgName='MyResourceGroup'
$location='eastus'

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

# Create a resource group.
New-AzResourceGroup -Name $rgName -Location $location

# Create a virtual network with a front-end subnet and back-end subnet.
$fesubnet = New-AzVirtualNetworkSubnetConfig -Name 'MySubnet-FrontEnd' -AddressPrefix '10.0.1.0/24'
$besubnet = New-AzVirtualNetworkSubnetConfig -Name 'MySubnet-BackEnd' -AddressPrefix '10.0.2.0/24'
$vnet = New-AzVirtualNetwork -ResourceGroupName $rgName -Name 'MyVnet' -AddressPrefix '10.0.0.0/16' `
  -Location $location -Subnet $fesubnet, $besubnet

# Create an NSG rule to allow HTTP traffic in from the Internet to the front-end subnet.
$rule1 = New-AzNetworkSecurityRuleConfig -Name 'Allow-HTTP-All' -Description 'Allow HTTP' `
  -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 `
  -SourceAddressPrefix Internet -SourcePortRange * `
  -DestinationAddressPrefix * -DestinationPortRange 80

# Create an NSG rule to allow RDP traffic from the Internet to the front-end subnet.
$rule2 = New-AzNetworkSecurityRuleConfig -Name 'Allow-RDP-All' -Description "Allow RDP" `
  -Access Allow -Protocol Tcp -Direction Inbound -Priority 200 `
  -SourceAddressPrefix Internet -SourcePortRange * `
  -DestinationAddressPrefix * -DestinationPortRange 3389


# Create a network security group for the front-end subnet.
$nsgfe = New-AzNetworkSecurityGroup -ResourceGroupName $RgName -Location $location `
  -Name 'MyNsg-FrontEnd' -SecurityRules $rule1,$rule2

# Associate the front-end NSG to the front-end subnet.
Set-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name 'MySubnet-FrontEnd' `
  -AddressPrefix '10.0.1.0/24' -NetworkSecurityGroup $nsgfe

# Create an NSG rule to allow SQL traffic from the front-end subnet to the back-end subnet.
$rule1 = New-AzNetworkSecurityRuleConfig -Name 'Allow-SQL-FrontEnd' -Description "Allow SQL" `
  -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 `
  -SourceAddressPrefix '10.0.1.0/24' -SourcePortRange * `
  -DestinationAddressPrefix * -DestinationPortRange 1433

# Create an NSG rule to allow RDP traffic from the Internet to the back-end subnet.
$rule2 = New-AzNetworkSecurityRuleConfig -Name 'Allow-RDP-All' -Description "Allow RDP" `
  -Access Allow -Protocol Tcp -Direction Inbound -Priority 200 `
  -SourceAddressPrefix Internet -SourcePortRange * `
  -DestinationAddressPrefix * -DestinationPortRange 3389

# Create a network security group for back-end subnet.
$nsgbe = New-AzNetworkSecurityGroup -ResourceGroupName $RgName -Location $location `
  -Name "MyNsg-BackEnd" -SecurityRules $rule1,$rule2

# Associate the back-end NSG to the back-end subnet
Set-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name 'MySubnet-BackEnd' `
  -AddressPrefix '10.0.2.0/24' -NetworkSecurityGroup $nsgbe

# Create a public IP address for the web server VM.
$publicipvm1 = New-AzPublicIpAddress -ResourceGroupName $rgName -Name 'MyPublicIp-Web' `
  -location $location -AllocationMethod Dynamic

# Create a NIC for the web server VM.
$nicVMweb = New-AzNetworkInterface -ResourceGroupName $rgName -Location $location `
  -Name 'MyNic-Web' -PublicIpAddress $publicipvm1 -NetworkSecurityGroup $nsgfe -Subnet $vnet.Subnets[0]

# Create a Web Server VM in the front-end subnet
$vmConfig = New-AzVMConfig -VMName 'MyVm-Web' -VMSize 'Standard_DS2' | `
  Set-AzVMOperatingSystem -Windows -ComputerName 'MyVm-Web' -Credential $cred | `
  Set-AzVMSourceImage -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' `
  -Skus '2016-Datacenter' -Version latest | Add-AzVMNetworkInterface -Id $nicVMweb.Id

$vmweb = New-AzVM -ResourceGroupName $rgName -Location $location -VM $vmConfig

# Create a public IP address for the SQL VM.
$publicipvm2 = New-AzPublicIpAddress -ResourceGroupName $rgName -Name MyPublicIP-Sql `
  -location $location -AllocationMethod Dynamic

# Create a NIC for the SQL VM.
$nicVMsql = New-AzNetworkInterface -ResourceGroupName $rgName -Location $location `
  -Name MyNic-Sql -PublicIpAddress $publicipvm2 -NetworkSecurityGroup $nsgbe -Subnet $vnet.Subnets[1] 

# Create a SQL VM in the back-end subnet.
$vmConfig = New-AzVMConfig -VMName 'MyVm-Sql' -VMSize 'Standard_DS2' | `
  Set-AzVMOperatingSystem -Windows -ComputerName 'MyVm-Sql' -Credential $cred | `
  Set-AzVMSourceImage -PublisherName 'MicrosoftSQLServer' -Offer 'SQL2016-WS2016' `
  -Skus 'Web' -Version latest | Add-AzVMNetworkInterface -Id $nicVMsql.Id

$vmsql = New-AzVM -ResourceGroupName $rgName -Location $location -VM $vmConfig

# Create an NSG rule to block all outbound traffic from the back-end subnet to the Internet (must be done after VM creation)
$rule3 = New-AzNetworkSecurityRuleConfig -Name 'Deny-Internet-All' -Description "Deny Internet All" `
  -Access Deny -Protocol Tcp -Direction Outbound -Priority 300 `
  -SourceAddressPrefix * -SourcePortRange * `
  -DestinationAddressPrefix Internet -DestinationPortRange *

# Add NSG rule to Back-end NSG
$nsgbe.SecurityRules.add($rule3)

Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsgbe

Rensa distributionClean up deployment

Kör följande kommando för att ta bort resursgruppen, den virtuella datorn och alla relaterade resurser:Run the following command to remove the resource group, VM, and all related resources:

Remove-AzResourceGroup -Name myResourceGroup -Force

Förklaring av skriptScript explanation

I det här skriptet används följande kommandon för att skapa en resursgrupp, ett virtuellt nätverk och nätverkssäkerhetsgrupper.This script uses the following commands to create a resource group, virtual network, and network security groups. Varje kommando i följande tabell länkar till kommandospecifik dokumentation:Each command in the following table links to command-specific documentation:

KommandoCommand KommentarerNotes
New-AzResourceGroupNew-AzResourceGroup Skapar en resursgrupp där alla resurser lagras.Creates a resource group in which all resources are stored.
New-AzVirtualNetworkNew-AzVirtualNetwork Skapar ett virtuellt Azure-nätverk och klientdelsundernät.Creates an Azure virtual network and front-end subnet.
New-AzVirtualNetworkSubnetConfigNew-AzVirtualNetworkSubnetConfig Skapar ett serverdelsundernät.Creates a back-end subnet.
New-AzPublicIpAddressNew-AzPublicIpAddress Skapar en offentlig IP-adress för åtkomst till den virtuella datorn från Internet.Creates a public IP address to access the VM from the internet.
New-AzNetworkInterfaceNew-AzNetworkInterface Skapar virtuella nätverksgränssnitt och kopplar dem till det virtuella nätverkets klient- och serverdelsundernät.Creates virtual network interfaces and attaches them to the virtual network's front-end and back-end subnets.
New-AzNetworkSecurityGroupNew-AzNetworkSecurityGroup Skapar nätverkssäkerhetsgrupper (NSG) som är kopplade till klient- och serverdelsundernäten.Creates network security groups (NSG) that are associated to the front-end and back-end subnets.
New-AzNetworkSecurityRuleConfigNew-AzNetworkSecurityRuleConfig Skapar NSG-regler som tillåter eller blockerar specifika portar till specifika undernät.Creates NSG rules that allow or block specific ports to specific subnets.
New-AzVMNew-AzVM Skapar virtuella datorer och kopplar ett nätverkskort till varje virtuell dator.Creates virtual machines and attaches a NIC to each VM. Det här kommandot anger även den virtuella datoravbildning som ska användas samt administrativa autentiseringsuppgifter.This command also specifies the virtual machine image to use and administrative credentials.
Remove-AzResourceGroupRemove-AzResourceGroup Tar bort en resursgrupp och alla resurser den innehåller.Deletes a resource group and all resources it contains.

Nästa stegNext steps

Mer information om Azure PowerShell finns i Azure PowerShell-dokumentationen.For more information on the Azure PowerShell, see Azure PowerShell documentation.

Ytterligare PowerShell-skriptexempel för virtuella nätverk finns i PowerShell-exempel för virtuella nätverk.Additional virtual network PowerShell script samples can be found in Virtual network PowerShell samples.