Usar o Azure PowerShell para criar um SQL Server na VM do Azure

Aplica-se a:SQL Server na VM do Azure

Este guia aborda opções para usar o PowerShell para provisionar um SQL Server na Máquina Virtual (VM) do Azure. Para obter um exemplo simplificado do Azure PowerShell que depende de valores padrão, consulte o início rápido do SQL Server no Azure VM PowerShell.

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Nota

Este artigo usa o módulo Azure Az PowerShell, que é o módulo PowerShell recomendado para interagir com o Azure. Para começar a utilizar o módulo Azure PowerShell, veja Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Configurar a sua subscrição

  1. Abra o PowerShell e estabeleça acesso à sua conta do Azure executando o comando Connect-AzAccount .

    Connect-AzAccount
    
  2. Quando lhe for pedido, introduza as suas credenciais. Utilize o mesmo e-mail e palavra-passe que utiliza para iniciar sessão no portal do Azure.

Definir variáveis de imagem

Para reutilizar valores e simplificar a criação de scripts, comece definindo várias variáveis. Altere os valores de parâmetro como desejar, mas esteja ciente das restrições de nomenclatura relacionadas a comprimentos de nome e caracteres especiais ao modificar os valores fornecidos.

Localização e grupo de recursos

Defina a região de dados e o grupo de recursos onde você deseja criar os outros recursos de VM.

Modifique como desejar e execute esses cmdlets para inicializar essas variáveis.

$Location = "SouthCentralUS"
$ResourceGroupName = "sqlvm2"

Propriedades de armazenamento

Defina a conta de armazenamento e o tipo de armazenamento a ser usado pela máquina virtual.

Modifique como desejar e execute o cmdlet a seguir para inicializar essas variáveis. Recomendamos o uso de SSDs premium para cargas de trabalho de produção.

$StorageName = $ResourceGroupName + "storage"
$StorageSku = "Premium_LRS"

Propriedades de rede

Defina as propriedades a serem usadas pela rede na máquina virtual.

  • Interface de Rede
  • Método de alocação TCP/IP
  • Nome da rede virtual
  • Nome da sub-rede virtual
  • Intervalo de endereços IP para a rede virtual
  • Intervalo de endereços IP para a sub-rede
  • Rótulo de nome de domínio público

Modifique como desejar e execute este cmdlet para inicializar essas variáveis.

$InterfaceName = $ResourceGroupName + "ServerInterface"
$NsgName = $ResourceGroupName + "nsg"
$TCPIPAllocationMethod = "Dynamic"
$VNetName = $ResourceGroupName + "VNet"
$SubnetName = "Default"
$VNetAddressPrefix = "10.0.0.0/16"
$VNetSubnetAddressPrefix = "10.0.0.0/24"
$DomainName = $ResourceGroupName

Propriedades da máquina virtual

Defina as seguintes propriedades:

  • Virtual machine name
  • Nome do computador
  • Tamanho da máquina virtual
  • Nome do disco do sistema operacional para a máquina virtual

Modifique como desejar e execute este cmdlet para inicializar essas variáveis.

$VMName = $ResourceGroupName + "VM"
$ComputerName = $ResourceGroupName + "Server"
$VMSize = "Standard_DS13"
$OSDiskName = $VMName + "OSDisk"

Escolha uma imagem do SQL Server

Use as variáveis a seguir para definir a imagem do SQL Server a ser usada para a máquina virtual.

  1. Primeiro, liste todas as ofertas de imagem do SQL Server com o Get-AzVMImageOffer comando. Este comando lista as imagens atuais que estão disponíveis no portal do Azure e também imagens mais antigas que só podem ser instaladas com o PowerShell:

    Get-AzVMImageOffer -Location $Location -Publisher 'MicrosoftSQLServer'
    

    Nota

    O SQL Server 2008 e o SQL Server 2008 R2 estão sem suporte estendido e não estão mais disponíveis no Azure Marketplace.

  2. Para este tutorial, use as variáveis a seguir para especificar o SQL Server 2022 no Windows Server 2022.

    $OfferName = "SQL2022-WS2022"
    $PublisherName = "MicrosoftSQLServer"
    $Version = "latest"
    
  3. Em seguida, liste as edições disponíveis para sua oferta.

    Get-AzVMImageSku -Location $Location -Publisher 'MicrosoftSQLServer' -Offer $OfferName | Select Skus
    
  4. Para este tutorial, use o SQL Server 2022 Developer edition (SQLDEV). A edição Developer é licenciada livremente para teste e desenvolvimento, e você paga apenas o custo de execução da VM.

    $Sku = "SQLDEV"
    

Criar um grupo de recursos

Com o modelo de implantação do Resource Manager, o primeiro objeto que você cria é o grupo de recursos. Use o cmdlet New-AzResourceGroup para criar um grupo de recursos do Azure e seus recursos. Especifique as variáveis que você inicializou anteriormente para o nome e o local do grupo de recursos.

Execute este cmdlet para criar seu novo grupo de recursos.

New-AzResourceGroup -Name $ResourceGroupName -Location $Location

Criar uma conta de armazenamento

A máquina virtual requer recursos de armazenamento para o disco do sistema operacional e para os arquivos de dados e log do SQL Server. Para simplificar, você criará um único disco para ambos. Você pode anexar discos adicionais posteriormente usando o cmdlet Add-Azure Disk para colocar seus dados e arquivos de log do SQL Server em discos dedicados. Use o cmdlet New-AzStorageAccount para criar uma conta de armazenamento padrão em seu novo grupo de recursos. Especifique as variáveis que você inicializou anteriormente para o nome da conta de armazenamento, o nome da SKU de armazenamento e o local.

Execute este cmdlet para criar sua nova conta de armazenamento.

$StorageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName `
   -Name $StorageName -SkuName $StorageSku `
   -Kind "Storage" -Location $Location

Gorjeta

A criação da conta de armazenamento pode levar alguns minutos.

Criar recursos de rede

A máquina virtual requer vários recursos de rede para conectividade de rede.

  • Cada máquina virtual requer uma rede virtual.
  • Uma rede virtual deve ter pelo menos uma sub-rede definida.
  • Uma interface de rede deve ser definida com um endereço IP público ou privado.

Criar uma configuração de sub-rede de rede virtual

Comece criando uma configuração de sub-rede para sua rede virtual. Para este tutorial, crie uma sub-rede padrão usando o cmdlet New-AzVirtualNetworkSubnetConfig . Especifique as variáveis que você inicializou anteriormente para o nome da sub-rede e o prefixo do endereço.

Nota

Você pode definir propriedades adicionais da configuração de sub-rede de rede virtual usando esse cmdlet, mas isso está além do escopo deste tutorial.

Execute este cmdlet para criar sua configuração de sub-rede virtual.

$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix

Criar uma rede virtual

Em seguida, crie sua rede virtual em seu novo grupo de recursos usando o cmdlet New-AzVirtualNetwork . Especifique as variáveis que você inicializou anteriormente para o nome, local e prefixo de endereço. Use a configuração de sub-rede definida na etapa anterior.

Execute este cmdlet para criar sua rede virtual.

$VNet = New-AzVirtualNetwork -Name $VNetName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig

Criar o endereço IP público

Agora que sua rede virtual está definida, você deve configurar um endereço IP para conectividade com a máquina virtual. Para este tutorial, crie um endereço IP público usando o endereçamento IP dinâmico para oferecer suporte à conectividade com a Internet. Use o cmdlet New-AzPublicIpAddress para criar o endereço IP público em seu novo grupo de recursos. Especifique as variáveis que você inicializou anteriormente para o nome, local, método de alocação e rótulo de nome de domínio DNS.

Nota

Você pode definir propriedades adicionais do endereço IP público usando esse cmdlet, mas isso está além do escopo deste tutorial inicial. Você também pode criar um endereço privado ou um endereço com um endereço estático, mas isso também está além do escopo deste tutorial.

Execute este cmdlet para criar seu endereço IP público.

$PublicIp = New-AzPublicIpAddress -Name $InterfaceName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName

Criar o grupo de segurança de rede

Para proteger o tráfego da VM e do SQL Server, crie um grupo de segurança de rede.

  1. Primeiro, crie uma regra de grupo de segurança de rede para área de trabalho remota (RDP) para permitir conexões RDP.

    $NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp `
       -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
    
  2. Configure uma regra de grupo de segurança de rede que permita o tráfego na porta TCP 1433. Isso permite conexões com o SQL Server pela Internet.

    $NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name "MSSQLRule"  -Protocol Tcp `
       -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
    
  3. Crie o grupo de segurança de rede.

    $Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName `
       -Location $Location -Name $NsgName `
       -SecurityRules $NsgRuleRDP,$NsgRuleSQL
    

Criar a interface de rede

Agora você está pronto para criar a interface de rede para sua máquina virtual. Use o cmdlet New-AzNetworkInterface para criar a interface de rede em seu novo grupo de recursos. Especifique o nome, o local, a sub-rede e o endereço IP público definidos anteriormente.

Execute este cmdlet para criar sua interface de rede.

$Interface = New-AzNetworkInterface -Name $InterfaceName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id `
   -NetworkSecurityGroupId $Nsg.Id

Configurar um objeto VM

Agora que os recursos de armazenamento e rede estão definidos, você está pronto para definir recursos de computação para a máquina virtual.

  • Especifique o tamanho da máquina virtual e várias propriedades do sistema operacional.
  • Especifique a interface de rede que você criou anteriormente.
  • Definir blob storage.
  • Especifique o disco do sistema operacional.

Criar o objeto VM

Comece especificando o tamanho da máquina virtual. Para este tutorial, especifique um DS13. Use o cmdlet New-AzVMConfig para criar um objeto de máquina virtual configurável. Especifique as variáveis que você inicializou anteriormente para o nome e o tamanho.

Execute este cmdlet para criar o objeto de máquina virtual.

$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize

Criar um objeto de credencial para manter o nome e a senha das credenciais de administrador local

Antes de definir as propriedades do sistema operacional para a máquina virtual, você deve fornecer as credenciais para a conta de administrador local como uma cadeia de caracteres segura. Para fazer isso, use o cmdlet Get-Credential .

Execute o cmdlet a seguir. Você precisará digitar o nome e a senha do administrador local da VM na janela de solicitação de credenciais do PowerShell.

$Credential = Get-Credential -Message "Type the name and password of the local administrator account."

Definir as propriedades do sistema operacional para a máquina virtual

Agora você está pronto para definir as propriedades do sistema operacional da máquina virtual com o cmdlet Set-AzVMOperatingSystem .

  • Defina o tipo de sistema operacional como Windows.
  • Exija que o agente de máquina virtual seja instalado.
  • Especifique que o cmdlet habilita a atualização automática.
  • Especifique as variáveis que você inicializou anteriormente para o nome da máquina virtual, o nome do computador e a credencial.

Execute este cmdlet para definir as propriedades do sistema operacional para sua máquina virtual.

$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine `
   -Windows -ComputerName $ComputerName -Credential $Credential `
   -ProvisionVMAgent -EnableAutoUpdate

Adicionar a interface de rede à máquina virtual

Em seguida, use o cmdlet Add-AzVMNetworkInterface para adicionar a interface de rede usando a variável definida anteriormente.

Execute este cmdlet para definir a interface de rede para sua máquina virtual.

$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $Interface.Id

Definir o local de armazenamento de blob para o disco a ser usado pela máquina virtual

Em seguida, defina o local de armazenamento de blob para o disco da VM com as variáveis definidas anteriormente.

Execute este cmdlet para definir o local de armazenamento de blob.

$OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd"

Definir as propriedades do disco do sistema operacional para a máquina virtual

Em seguida, defina as propriedades de disco do sistema operacional para a máquina virtual usando o cmdlet Set-AzVMOSDisk .

  • Especifique que o sistema operacional da máquina virtual virá de uma imagem.
  • Defina o cache como somente leitura (porque o SQL Server está sendo instalado no mesmo disco).
  • Especifique as variáveis que você inicializou anteriormente para o nome da VM e o disco do sistema operacional.

Execute este cmdlet para definir as propriedades de disco do sistema operacional para sua máquina virtual.

$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name `
   $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage

Especificar a imagem da plataforma para a máquina virtual

A última etapa de configuração é especificar a imagem da plataforma para sua máquina virtual. Para este tutorial, use a imagem CTP mais recente do SQL Server 2016. Use o cmdlet Set-AzVMSourceImage para usar essa imagem com as variáveis definidas anteriormente.

Execute este cmdlet para especificar a imagem da plataforma para sua máquina virtual.

$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine `
   -PublisherName $PublisherName -Offer $OfferName `
   -Skus $Sku -Version $Version

Criar a VM do SQL

Agora que você concluiu as etapas de configuração, está pronto para criar a máquina virtual. Use o cmdlet New-AzVM para criar a máquina virtual usando as variáveis que você definiu.

Gorjeta

A criação da VM poderá demorar alguns minutos.

Execute este cmdlet para criar sua máquina virtual.

New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine

A máquina virtual é criada.

Nota

Se você receber um erro sobre o diagnóstico de inicialização, poderá ignorá-lo. Uma conta de armazenamento padrão é criada para diagnóstico de inicialização porque a conta de armazenamento especificada para o disco da máquina virtual é uma conta de armazenamento premium.

Instalar extensão do Agente de IaaS do SQL

As máquinas virtuais do SQL Server oferecem suporte a recursos de gerenciamento automatizado com a Extensão do Agente IaaS do SQL Server. Para registrar seu SQL Server com a extensão, execute o comando New-AzSqlVM depois que a máquina virtual for criada. Especifique o tipo de licença para sua VM do SQL Server, escolhendo entre pagar conforme o uso ou trazer sua própria licença por meio do Benefício Híbrido do Azure. Para obter mais informações sobre licenciamento, consulte Modelo de licenciamento.

New-AzSqlVM -ResourceGroupName $ResourceGroupName -Name $VMName -Location $Location -LicenseType <PAYG/AHUB> 

Há três maneiras de se registrar com a extensão:

Parar ou remover uma VM

Se você não precisar que a VM seja executada continuamente, poderá evitar cobranças desnecessárias interrompendo-a quando não estiver em uso. O comando seguinte para a VM, mas deixa-a disponível para utilização futura.

Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroupName

Você também pode excluir permanentemente todos os recursos associados à máquina virtual com o comando Remove-AzResourceGroup . Isso exclui permanentemente a máquina virtual também, portanto, use este comando com cuidado.

Script de exemplo

O script a seguir contém o script PowerShell completo para este tutorial. Ele pressupõe que você já tenha configurado a assinatura do Azure para usar com os comandos Connect-AzAccount e Select-AzSubscription .

# Variables

## Global
$Location = "SouthCentralUS"
$ResourceGroupName = "sqlvm2"

## Storage
$StorageName = $ResourceGroupName + "storage"
$StorageSku = "Premium_LRS"

## Network
$InterfaceName = $ResourceGroupName + "ServerInterface"
$NsgName = $ResourceGroupName + "nsg"
$VNetName = $ResourceGroupName + "VNet"
$SubnetName = "Default"
$VNetAddressPrefix = "10.0.0.0/16"
$VNetSubnetAddressPrefix = "10.0.0.0/24"
$TCPIPAllocationMethod = "Dynamic"
$DomainName = $ResourceGroupName

##Compute
$VMName = $ResourceGroupName + "VM"
$ComputerName = $ResourceGroupName + "Server"
$VMSize = "Standard_DS13"
$OSDiskName = $VMName + "OSDisk"

##Image
$PublisherName = "MicrosoftSQLServer"
$OfferName = "SQL2017-WS2016"
$Sku = "SQLDEV"
$Version = "latest"

# Resource Group
New-AzResourceGroup -Name $ResourceGroupName -Location $Location

# Storage
$StorageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageName -SkuName $StorageSku -Kind "Storage" -Location $Location

# Network
$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix
$VNet = New-AzVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig
$PublicIp = New-AzPublicIpAddress -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName
$NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
$NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name "MSSQLRule"  -Protocol Tcp -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
$Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName -Location $Location -Name $NsgName -SecurityRules $NsgRuleRDP,$NsgRuleSQL
$Interface = New-AzNetworkInterface -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id -NetworkSecurityGroupId $Nsg.Id

# Compute
$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize
$Credential = Get-Credential -Message "Type the name and password of the local administrator account."
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $ComputerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate #-TimeZone = $TimeZone
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $Interface.Id
$OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd"
$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage

# Image
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName $PublisherName -Offer $OfferName -Skus $Sku -Version $Version

# Create the VM in Azure
New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine

# Add the SQL IaaS Agent Extension, and choose the license type
New-AzSqlVM -ResourceGroupName $ResourceGroupName -Name $VMName -Location $Location -LicenseType <PAYG/AHUB> 

Próximos passos

Depois que a máquina virtual for criada, você poderá: