Implantar VM do Azure no Powershell

Neste post vamos ensinar como criar uma VM no Azure por meio do script Powershell. Eu criei isso há alguns meses em equipe com o Thiago Alencar para atender a uma necessidade na empresa que trabalhei para implantar muitas máquinas virtuais semelhantes no azure, que vêm de uma lista predefinida de VMs em um arquivo csv.

Leia Mais:

Gerencie VMs no seu ambiente Hyper-V 3.0
Configurando Azure AD Connect passo a passo
Quais são os 4 tipos de Microsoft Active Directory
Armazenamento em nuvem e seus benefícios
Aprenda já a criar VMs no azure por linha de comando

Vamos começar. Você deve começar a abrir a ferramenta ISE do Windows PowerShell

Depois de aberto, devemos começar a codificar, e sua primeira etapa deve se conectar à sua assinatura

Connect-AzAccount

PS – para o comando acima, uma janela aparecerá solicitando suas credenciais do azure

Se você tiver mais de uma assinatura, tenha em mente em perfmon esses comandos e selecione o correto que deseja, por exemplo, vou escolher minha assinatura do Visual Studio.

Get-AzSubscription -SubscriptionName "Visual Studio Enterprise with MSDN" | Select-AzSubscription

Como bem sabemos, todos os recursos no azul devem estar em um grupo de recursos (TCRG no meu caso) e devem pertencer a um determinado local , para evitar redigitar repetidas vezes, vou colocá-los em variáveis ​​e reutilizá-los se necessário.

$ResourceGroupName = "TCRG"
$Location = "northeurope"
New-AzResourceGroup -Name $ResourceGroupName -Location $Location

Se formos para o portal do Azure, vamos olhar um RG (grupo de recursos) criado lá

A partir daqui, vou criar coisas de rede, como vnet, sub-rede, NSG e regras de entrada e saída de sub-rede.

$SubnetName = $ResourceGroupName + "subnet"
$VnetName = $ResourceGroupName + "vnet"
$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix 192.168.1.0/24
$Vnet = New-AzVirtualNetwork -ResourceGroupName $ResourceGroupName -Location $Location   -Name $VnetName -AddressPrefix 192.168.0.0/16 -Subnet $SubnetConfig
$NsgRuleInbound = New-AzNetworkSecurityRuleConfig -Name "NsgRuleInbound" -Protocol Tcp   -Direction Inbound -Priority 100 -SourceAddressPrefix * -SourcePortRange *   -DestinationAddressPrefix * -DestinationPortRange * -Access Allow
$NsgRuleOutbound = New-AzNetworkSecurityRuleConfig -Name "NsgRuleOutbound" -Protocol Tcp   -Direction Outbound -Priority 101 -SourceAddressPrefix * -SourcePortRange *   -DestinationAddressPrefix * -DestinationPortRange * -Access Allow
$NsgName = $ResourceGroupName + "nsg"
$Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName  -Location $Location -Name $NsgName   -SecurityRules $NsgRuleInbound,$NsgRuleOutbound

PS – Por favor, preste atenção que eu permiti qualquer conexão (entrada e saída), NÃO FAÇA ISSO NO PROD.

#DicaProfissa: Faça um curso profissionalizante!
Garanta um curso certificado na área de TI e Software pela plataforma de estudos online Udemy.
Clique aqui e confira todos os cursos mais recentes em tecnologia!

Até agora, nossa implantação se parece com:

PS – note que ainda não criei o IP, isso será feito dentro de um Foreach depois.

Assim que a configuração da rede for concluída, obterei todas as propriedades da VM do meu arquivo VMList.csv que estão sendo mantidas no caminho c: \ temp \. Vamos dar uma olhada dentro deste arquivo

O PowerShell carregará todas as propriedades deste arquivo em um objeto. Dentro do for each statement, irei criar o IP, interface, oferta do servidor SQL, edição SQL, etc.

$GetVmList =  Import-Csv "C:\temp\VMList.csv"
foreach ($vml in $GetVmList)
{
$SecurePassword = ConvertTo-SecureString  $vml.Senha -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ($vml.Usuario, $securePassword)
$PipName = $ResourceGroupName + $(Get-Random)
$Pip = New-AzPublicIpAddress -ResourceGroupName $ResourceGroupName -Location $Location   -AllocationMethod Static -IdleTimeoutInMinutes 4 -Name $PipName
$Interface = New-AzNetworkInterface -Name $vml.Interface  -ResourceGroupName
$ResourceGroupName -Location $Location    -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $Pip.Id  -NetworkSecurityGroupId $Nsg.Id
$VMConfig = New-AzVMConfig -VMName $vml.VMName  -VMSize $vml.VMsize |
        Set-AzVMOperatingSystem -Windows -ComputerName $vml.VMName -Credential $Cred -ProvisionVMAgent -EnableAutoUpdate |
        Set-AzVMSourceImage -PublisherName "MicrosoftSQLServer" -Offer "SQL2016SP2-WS2012R2" -Skus "SQLDEV" -Version "latest" |
        Add-AzVMNetworkInterface -Id $Interface.Id
New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VMConfig
}

O comando acima levará alguns minutos para ser executado, quando estiver pronto, você verá uma mensagem como esta:

Lembre-se de que passei pela interface do Azure Powershell para retirar esses valores para adicioná-los à minha solução, se você precisar de algo diferente disso, consulte a documentação da Microsoft para descobrir o que você precisará implementar.

#DicaProfissa: Faça um curso profissionalizante!
Garanta um curso certificado na área de TI e Software pela plataforma de estudos online Udemy.
Clique aqui e confira todos os cursos mais recentes em tecnologia!

É assim que nossa solução deve ser no final da implantação

Clique na VM SQLVM01> conecte e baixe o RDP para sua máquina e cadastre-se com as credenciais previamente criadas no arquivo .csv

Sua máquina estará pronta para ser usada! Espero que você tenha gostado e até mais!

Havia outra forma de implementar e melhorar esta solução? Claro, eu poderia criar muitos “IFs” para validar se algo existe ou não e assim por diante, mas não era necessário no meu cenário, fique à vontade para usar esta solução e melhorá-la.

Este artigo foi útil?

Para manter um padrão de qualidade para vocês, investimos em um ótimo plano de hospedagem, CDN Pago, Plugins de Otimização para o Site, etc…

Ajude-nos a manter o projeto ativo! 

Acompanhe as novidades em tempo real. Siga nosso perfil no Instagram..

Felipe Santos
Felipe Santos é Arquiteto de Cloud e Segurança, com vivência em Administração de Ambientes Windows Server, Cluster, Storages, Backups Veeam e Office 365.
pt_BRPortuguese

ATÉ 90% DE DESCONTO

DECOLE SUA CARREIRA!!

Quer dar um upgrade na sua carreira? 

Invista em você e saia na frente! Conquiste aquele emprego dos sonhos em 2022!