Início Rápido: Criar uma VM do servidor Linux usando o PowerShell no Azure Stack Hub
Você pode criar uma VM (máquina virtual) do Ubuntu Server 20.04 LTS usando o PowerShell do Azure Stack Hub. Neste artigo, você criará e usará uma máquina virtual. Este artigo também mostra como:
- Conecte-se à VM com um cliente remoto.
- Instale um servidor Web NGINX e exiba a home page padrão.
- Limpar recursos não utilizados.
Pré-requisitos
Uma imagem do Linux no Marketplace do Azure Stack Hub. O Marketplace do Azure Stack Hub não tem uma imagem do Linux por padrão. Faça com que o operador do Azure Stack Hub forneça a imagem Ubuntu Server 20.04 LTS necessária. O operador pode usar as instruções em Baixar itens do Marketplace do Azure para o Azure Stack Hub.
O Azure Stack Hub requer uma versão específica da CLI do Azure para criar e gerenciar seus recursos.
- Se você não tiver o PowerShell configurado para o Azure Stack Hub, confira Instalar o PowerShell para o Azure Stack Hub.
- Depois que o PowerShell do Azure Stack Hub for configurado, você se conectará ao ambiente do Azure Stack Hub. Para obter instruções, consulte Conectar-se ao Azure Stack Hub com o PowerShell como um usuário.
Uma chave SSH (Secure Shell) pública com o nome id_rsa.pub salvo no diretório .ssh do seu perfil de usuário do Windows. Para obter informações detalhadas sobre como criar chaves SSH, consulte Usar um par de chaves SSH com o Azure Stack Hub.
Criar um grupo de recursos
Um grupo de recursos é um contêiner lógico em que você pode implantar e gerenciar recursos do Azure Stack Hub. Para criar um grupo de recursos, execute o seguinte bloco de código:
Observação
Atribuimos valores para todas as variáveis nos exemplos de código a seguir. No entanto, você pode atribuir seus próprios valores.
# Create variables to store the location and resource group names.
$location = "local"
$ResourceGroupName = "myResourceGroup"
New-AzResourceGroup `
-Name $ResourceGroupName `
-Location $location
Criar recursos de armazenamento
Crie uma conta de armazenamento que será usada para armazenar a saída diagnóstico inicialização.
# Create variables to store the storage account name and the storage account SKU information
$StorageAccountName = "mystorageaccount"
$SkuName = "Standard_LRS"
# Create a new storage account
$StorageAccount = New-AzStorageAccount `
-Location $location `
-ResourceGroupName $ResourceGroupName `
-Type $SkuName `
-Name $StorageAccountName
Set-AzCurrentStorageAccount `
-StorageAccountName $storageAccountName `
-ResourceGroupName $resourceGroupName
Criar recursos de rede
Crie uma rede virtual, uma sub-rede e um endereço IP público. Esses recursos são usados para fornecer conectividade de rede à VM.
# Create a subnet configuration
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
# Create a virtual network
$vnet = New-AzVirtualNetwork `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-Name MyVnet `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
# Create a public IP address and specify a DNS name
$pip = New-AzPublicIpAddress `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4 `
-Name "mypublicdns$(Get-Random)"
Crie um grupo de segurança de rede e uma regra de grupo de segurança de rede
O grupo de segurança de rede protege a VM usando regras de entrada e saída. Crie uma regra de entrada para a porta 3389 para permitir conexões de entrada da Área de Trabalho Remota e uma regra de entrada para a porta 80 para permitir o tráfego da Web de entrada.
# Create variables to store the network security group and rules names.
$nsgName = "myNetworkSecurityGroup"
$nsgRuleSSHName = "myNetworkSecurityGroupRuleSSH"
$nsgRuleWebName = "myNetworkSecurityGroupRuleWeb"
# Create an inbound network security group rule for port 22
$nsgRuleSSH = New-AzNetworkSecurityRuleConfig -Name $nsgRuleSSHName -Protocol Tcp `
-Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 22 -Access Allow
# Create an inbound network security group rule for port 80
$nsgRuleWeb = New-AzNetworkSecurityRuleConfig -Name $nsgRuleWebName -Protocol Tcp `
-Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 80 -Access Allow
# Create a network security group
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName -Location $location `
-Name $nsgName -SecurityRules $nsgRuleSSH,$nsgRuleWeb
Criar um cartão de rede para a VM
A rede cartão conecta a VM a uma sub-rede, grupo de segurança de rede e endereço IP público.
# Create a virtual network card and associate it with public IP address and NSG
$nic = New-AzNetworkInterface `
-Name myNic `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id
Criar uma máquina virtual
Crie a configuração da VM. Essa configuração inclui as configurações a serem usadas ao implantar a VM (por exemplo, credenciais de usuário, tamanho e a imagem da VM).
# Define a credential object
$UserName='demouser'
$securePassword = ConvertTo-SecureString ' ' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($UserName, $securePassword)
# Create the VM configuration object
$VmName = "VirtualMachinelatest"
$VmSize = "Standard_D1"
$VirtualMachine = New-AzVMConfig `
-VMName $VmName `
-VMSize $VmSize
$VirtualMachine = Set-AzVMOperatingSystem `
-VM $VirtualMachine `
-Linux `
-ComputerName "MainComputer" `
-Credential $cred
$VirtualMachine = Set-AzVMSourceImage `
-VM $VirtualMachine `
-PublisherName "Canonical" `
-Offer "UbuntuServer" `
-Skus "20.04-LTS" `
-Version "latest"
# Set the operating system disk properties on a VM
$VirtualMachine = Set-AzVMOSDisk `
-VM $VirtualMachine `
-CreateOption FromImage | `
Set-AzVMBootDiagnostic -ResourceGroupName $ResourceGroupName `
-StorageAccountName $StorageAccountName -Enable |`
Add-AzVMNetworkInterface -Id $nic.Id
# Configure SSH keys
$sshPublicKey = Get-Content "$env:USERPROFILE\.ssh\id_rsa.pub"
# Add the SSH key to the VM
Add-AzVMSshPublicKey -VM $VirtualMachine `
-KeyData $sshPublicKey `
-Path "/home/$UserName/.ssh/authorized_keys"
# Create the VM
New-AzVM `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-VM $VirtualMachine
Criação Rápida de VM: script completo
Observação
Essa etapa é essencialmente o código anterior mesclado, mas com uma senha em vez de uma chave SSH para autenticação.
## Create a resource group
<#
A resource group is a logical container where you can deploy and manage Azure Stack Hub resources. From your development kit or the Azure Stack Hub integrated system, run the following code block to create a resource group. Though we've assigned values for all the variables in this article, you can use these values or assign new ones.
#>
# Edit your variables, if required
# Create variables to store the location and resource group names
$location = "local"
$ResourceGroupName = "myResourceGroup"
# Create variables to store the storage account name and the storage account SKU information
$StorageAccountName = "mystorageaccount"
$SkuName = "Standard_LRS"
# Create variables to store the network security group and rules names
$nsgName = "myNetworkSecurityGroup"
$nsgRuleSSHName = "myNetworkSecurityGroupRuleSSH"
$nsgRuleWebName = "myNetworkSecurityGroupRuleWeb"
# Create variable for VM password
$VMPassword = 'Password123!'
# End of variables - no need to edit anything past that point to deploy a single VM
# Create a resource group
New-AzResourceGroup `
-Name $ResourceGroupName `
-Location $location
## Create storage resources
# Create a storage account, and then create a storage container for the Ubuntu Server 20.04 LTS image
# Create a new storage account
$StorageAccount = New-AzStorageAccount `
-Location $location `
-ResourceGroupName $ResourceGroupName `
-Type $SkuName `
-Name $StorageAccountName
Set-AzCurrentStorageAccount `
-StorageAccountName $storageAccountName `
-ResourceGroupName $resourceGroupName
# Create a storage container to store the VM image
$containerName = 'osdisks'
$container = New-AzureStorageContainer `
-Name $containerName `
-Permission Blob
## Create networking resources
# Create a virtual network, a subnet, and a public IP address, resources that are used provide network connectivity to the VM
# Create a subnet configuration
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
# Create a virtual network
$vnet = New-AzVirtualNetwork `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-Name MyVnet `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
# Create a public IP address and specify a DNS name
$pip = New-AzPublicIpAddress `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4 `
-Name "mypublicdns$(Get-Random)"
### Create a network security group and a network security group rule
<#
The network security group secures the VM by using inbound and outbound rules. Create an inbound rule for port 3389 to allow incoming Remote Desktop connections and an inbound rule for port 80 to allow incoming web traffic.
#>
# Create an inbound network security group rule for port 22
$nsgRuleSSH = New-AzNetworkSecurityRuleConfig -Name $nsgRuleSSHName -Protocol Tcp `
-Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 22 -Access Allow
# Create an inbound network security group rule for port 80
$nsgRuleWeb = New-AzNetworkSecurityRuleConfig -Name $nsgRuleWebName -Protocol Tcp `
-Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 80 -Access Allow
# Create a network security group
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName -Location $location `
-Name $nsgName -SecurityRules $nsgRuleSSH,$nsgRuleWeb
### Create a network card for the VM
# The network card connects the VM to a subnet, network security group, and public IP address.
# Create a virtual network card and associate it with public IP address and NSG
$nic = New-AzNetworkInterface `
-Name myNic `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id
## Create a VM
<#
Create a VM configuration. This configuration includes the settings used when deploying the VM. For example: user credentials, size, and the VM image.
#>
# Define a credential object
$UserName='demouser'
$securePassword = ConvertTo-SecureString $VMPassword -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($UserName, $securePassword)
# Create the VM configuration object
$VmName = "VirtualMachinelatest"
$VmSize = "Standard_D1"
$VirtualMachine = New-AzVMConfig `
-VMName $VmName `
-VMSize $VmSize
$VirtualMachine = Set-AzVMOperatingSystem `
-VM $VirtualMachine `
-Linux `
-ComputerName "MainComputer" `
-Credential $cred
$VirtualMachine = Set-AzVMSourceImage `
-VM $VirtualMachine `
-PublisherName "Canonical" `
-Offer "UbuntuServer" `
-Skus "20.04-LTS" `
-Version "latest"
$osDiskName = "OsDisk"
$osDiskUri = '{0}vhds/{1}-{2}.vhd' -f `
$StorageAccount.PrimaryEndpoints.Blob.ToString(),`
$vmName.ToLower(), `
$osDiskName
# Set the operating system disk properties on a VM
$VirtualMachine = Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $osDiskName `
-VhdUri $OsDiskUri `
-CreateOption FromImage | `
Add-AzVMNetworkInterface -Id $nic.Id
# Create the VM
New-AzVM `
-ResourceGroupName $ResourceGroupName `
-Location $location `
-VM $VirtualMachine
Conectar-se à VM
Depois de implantar a VM, configure uma conexão SSH para ela. Para obter o endereço IP público da VM, use o comando Get-AzPublicIpAddress :
Get-AzPublicIpAddress -ResourceGroupName myResourceGroup | Select IpAddress
Em um sistema cliente com SSH instalado, use o comando a seguir para se conectar à VM. Se você estiver trabalhando no Windows, poderá usar o PuTTY para criar a conexão.
ssh <Public IP Address>
Quando for solicitado, entre como azureuser. Se você usou uma frase secreta quando criou as chaves SSH, precisará fornecer a frase secreta.
Instalar o servidor Web NGINX
Para atualizar os recursos do pacote e instalar o pacote NGINX mais recente, execute o seguinte script:
#!/bin/bash
# update package source
apt-get -y update
# install NGINX
apt-get -y install nginx
Exibir a página de boas-vindas do NGINX
Com o servidor Web NGINX instalado e a porta 80 aberta em sua VM, você pode acessar o servidor Web usando o endereço IP público da VM. Abra um navegador da Web e vá para http://<public IP address>
.
Limpar os recursos
Você pode limpo os recursos de que não precisa mais usando o comando Remove-AzResourceGroup. Para excluir o grupo de recursos e todos os seus recursos, execute o seguinte comando:
Remove-AzResourceGroup -Name myResourceGroup
Próximas etapas
Neste início rápido, você implantou uma VM básica do servidor Linux. Para saber mais sobre as VMs do Azure Stack Hub, acesse Considerações sobre VMs no Azure Stack Hub.