Merhaba,
Powershell ile Azure RM VM’lerin yönetimini anlattığım makale serisinin bu bölümünde AzureRM powershell modülü ile tüm özellikleri özelleştirilmiş bir VM’i nasıl oluşturacağınızı anlatacağım.
Daha önceki bölümde New-Azurermvm cmdlet’ini ve ona ait parametreleri kullanarak sample VM’leri nasıl oluşturabileceğinizden bahsetmiştim. Çok fazla özelleştirme yapılmayan ve cmdlet’in desteklediği parametreleri içeren bir yöntem olduğunu belirtmiştim. Şimdi ise VM oluşturma sürecini daha da özelleştirilmiş bir hale getirmeyi ve VM için gerekli kaynakları istediğimiz şekilde tek tek oluşturup VM oluşturma işlemine dahil etmeyi ayrıntılı olarak anlatacağım. Umarım herkes için faydalı bir makale olur :)
Şimdi öncelikle script’i yazmadan önce Azure ortamına login olalım. Bunun için Login-AzureRMAccount cmdlet’ini kullanmamız gerekir. Eğer Azure üzerindeki Cloud Shell’i kullanırsanız, bu aşamaya gerek kalmayacaktır. Login işleminin ardından neredeyse tüm komutlarda kullanacağımız resource group ismi ve location’ı birer değişkene atayalım. Bu sayede komutlarda her defasında bu bileşenleri tekrarlamaya gerek kalmayacaktır. Tabi bir de oluşturacağımız VM’e vereceğimiz ismi de değişkene atayalım.
Login-AzureRmAccount
# Değişkenler
$resourceGroup = “FRTVMRG”
$location = “WestEurope”
$vmName = “FRTVM01”
Değişken atama işlemlerinin ardından VM için gerekli olan bileşenleri oluşturmadan önce VM için gerekli olan local admin bilgilerini (kullanıcı adı ve parola) bir değişkene atayalım. Komut çalıştırıldığında kimlik bilgilerinin girileceği bir pencere açılacaktır. Bu pencere yardımı ile kullanıcı adı ve parola bilgisi $cred değişkenine atanmış olacaktır.
# VM için credential oluşturulması
$cred = Get-Credential -Message “Enter a username and password for the virtual machine.”
Resim – 1
Account bilgilerinin ardından tüm resource’ları barındıracak resource group’u oluşturabiliriz. Bu amaçla ilk sırada verdiğimiz değişkenleri de kullanarak resource group’u oluşturalım.
# Resource Group oluşturma işlemi
New-AzureRmResourceGroup -Name $resourceGroup -Location $location
Resim – 2
Resource group’un başarılı şekilde oluşturulmasının ardından gerekli konfigürasyonlara başlayabiliriz. İlk olarak VM’in yer alacağı subnet’i config’ini oluşturup ardından bu subnet’i kullanarak Vnet’i oluşturalım.
Subnet’i oluşturuken subnet’in ismini ve bu subnet’e ait AddressPrefix’ini oluşturalım.
# Subnet oluşturma işlemi
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name VMSubnet -AddressPrefix 192.168.1.0/24
Resim – 3
Ardından oluşturduğumuz bu subnet’i de kullanarak Vnet’i oluşturalım. Vnet’i oluştururken Vnet’in address range’ini, lokasyonunu, resource group’unu belirtmek gerekir. Bunlara ek olarak da bir önceki adımda oluşturmuş olduğumuz subnetconfig’i –Subnet parametresine atamak gerekir. Bu özelliklere göre aşağıdaki komut ile vnet’i oluşturalım.
# Subnet config kullanılaran Vnet oluşturulması işlemi
$vnet = New-AzureRmVirtualNetwork -ResourceGroupName $resourceGroup -Location $location -Name FRTVNET -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig
Resim – 4
Şimdi de public ip’yi oluşturalım. Bu adım VM’in durumuna göre opsiyonel olabilir. Burada önemli noktalardan birisi Ip’nin dynamic yada static olmasıdır. –AllocatedMethod parametresini kullanarak bunu belirleyebiliriz.
# Public IP adres ve dns ismi oluşturma işlemi
$pip = New-AzureRmPublicIpAddress -ResourceGroupName $resourceGroup -Location $location -Name “FRTpublicdns$(Get-Random)” -AllocationMethod Static -IdleTimeoutInMinutes 4
Resim – 5
Public Ip oluşturduktan sonra şimdi de VM’in kullanacağı network security group’u oluşturalım. Bu da VM için zorunlu bir konfigürasyon değil. Opsiyonel olarak yapılandırabilir siniz.
Burada ilk aşamada NSG için bir rule oluşturalım. Bu rule ile RDP’ye izin verelim. Komutu okuduğunuzda da oldukça anlaşılır olduğunu görebilirsiniz. En azından firewall konfigürasyonu yaptıysanız parametreler oldukça tanıdık gelecektir :)
# RDP için nsg rule oluşturma
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig -Name FRTNetworkSecurityGroupRuleRDP -Protocol Tcp `
-Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 3389 -Access Allow
Bu işlemin ardından bir önceki adımda oluşturduğumuz rule’u da kullanarak network security group’u oluşturabiliriz. Diğer komutlardan farklı olarak –securitygroup değişkenine bir önceki adımda oluşturduğumuz rule değişkenini atamamız yeterli olacaktır.
# Oluşturulan NSG rule kullanılarak nsg oluşturma
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
-Name FRTNetworkSecurityGroup -SecurityRules $nsgRuleRDP
Resim – 6
Şimdi de subnet,public ip ve nsg bileşenlerini kullanarak VM’in kullanacağı NIC’i oluşturalım.
$nic = New-AzureRmNetworkInterface -Name FRTVMNic -ResourceGroupName $resourceGroup -Location $location `
-SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
Resim – 7
Tüm bu bileşenleri oluşturduktan sonra asıl önemli olan kısma geldik. Daha önceki makalelerimde ARM mimarisindeki VM konfigürasyonunun farklı profillerden oluştuğundan bahsetmiştim. Biz de burada bu profillere göre bir config oluşturup VM oluşturma işlemine dahil edeceğiz.
Bahsettiğim profilleri içeren config’i hazırlarken adım adım değişkeni işleyip en sonunda VM oluşturma işlemine ekleyeceğiz.
Aşağıdaki komutta ilk olarak VM’in hardware konfigürasyonunu config değişkenine kaydediyoruz. Böylece Hardware’e ilişkin bilgileri $vmConfig değişkenine yazıyoruz. Resimde görüldüğü gibi bu işlem sonucunda Hardware profile işlenmiş olacaktır.
#Hardware Profile
$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize Standard_A1
Resim – 8
OS profile ise makine ismi, işletim sistemi, local admin kullanıcısı gibi bilgileri içerir. Bu bilgiler için de aşağıdaki komuta gerekli parametreleri vererek OS profile’ını kaydedelim.
#OS Profile
$vmConfig = Set-AzureRmVMOperatingSystem -VM $vmConfig -Windows -ComputerName $vmName -Credential $cred
Resim – 9
Storage profile’ı kullanılacak imaja ait bilgileri içerir.Buraya farklı komutlarla farklı bilgiler de yazabiliriz.(Örneğin var olan bir disk kullanılacağı zaman) Bir sonraki makalede bu konuyu ele alacağız. Şimdi bu komutu çalıştırıp storage profile’ına ilişkin config’leri değişkene kaydedelim.
#Storage Profile
$vmConfig = Set-AzureRmVMSourceImage -VM $vmConfig -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus
2016-Datacenter -Version latest
Resim – 10
Son olarak oluşturduğumuz Nic’i network profile’ına ekleyelim.
#Network Profile
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $nic.Id
Resim – 11
Evet bütün profile’lar için gerekli bilgileri yazdık ve bir değişkene kaydettik. Şimdi bu değişkeni kullanarak aşağıdaki komut ile VM’i oluşturalım.
# Belirtilen konfigürasyonlar kullanılıp VM’i oluşturma
New-AzureRmVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig
Resim – 12
Oluşturma işlemi tamamlandığında portal üzerinden resource group altındaki tüm resource’ları görüntüleyebilir siniz.
Resim – 13
Bu makalede VM oluşturma işlemi sırasında bileşenlerin hepsini sıfırdan oluştururken nasıl özelleştirebileceğinizi anlatmaya çalıştım. Bir sonraki bölümde var olan disk ve vnet’i kullanarak VM oluşturma sürecini nasıl özelleştireceğinizi anlatacağım.
Scriptin tamamı aşağıdaki gibidir.
Login-AzureRmAccount
# Değişkenler
$resourceGroup = “FRTVMRG”
$location = “WestEurope”
$vmName = “FRTVM01”
# VM için credential oluşturulması
$cred = Get-Credential -Message “VM için kullanıcı adı ve parola giriniz.”
# Resource Group oluşturma işlemi
New-AzureRmResourceGroup -Name $resourceGroup -Location $location
# Subnet oluşturma işlemi
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name VMSubnet -AddressPrefix 192.168.1.0/24
# Subnet config kullanılaran Vnet oluşturulması işlemi
$vnet = New-AzureRmVirtualNetwork -ResourceGroupName $resourceGroup -Location $location -Name FRTVNET -AddressPrefix
192.168.0.0/16 -Subnet $subnetConfig
# Public IP adres ve dns ismi oluşturma işlemi
$pip = New-AzureRmPublicIpAddress -ResourceGroupName $resourceGroup -Location $location -Name “FRTpublicdns$(Get-Random)“
-AllocationMethod Static -IdleTimeoutInMinutes 4
# RDP için nsg rule oluşturma
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig -Name FRTNetworkSecurityGroupRuleRDP -Protocol Tcp `
-Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 3389 -Access Allow
# Oluşturulan NSG rule kullanılarak nsg oluşturma
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
-Name FRTNetworkSecurityGroup -SecurityRules $nsgRuleRDP
# Subnet,public IP ve nsg kullanılarak nic oluşturma
$nic = New-AzureRmNetworkInterface -Name FRTVMNic1 -ResourceGroupName $resourceGroup -Location $location `
-SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
# VM profile’larına ilişkin konfigürasyonları oluşturma
#Hardware Profile
$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize Standard_A1
#OS Profile
$vmConfig = Set-AzureRmVMOperatingSystem -VM $vmConfig -Windows -ComputerName $vmName -Credential $cred
#Storage Profile
$vmConfig = Set-AzureRmVMSourceImage -VM $vmConfig -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus
2016-Datacenter -Version latest
#Network Profile
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $nic.Id
# Belirtilen konfigürasyonlar kullanılıp VM’i oluşturma
New-AzureRmVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig
Bir sonraki makalede görüşmek üzere.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/overview
TAGs: powershell, Azure Rm Powershell Module, Create Azure VM , Create Azure RM VM with Powershell, Azure RM VM via powershell, Create Azure virtual machine via powershell, Powershell Azure VM Command, Azure RM Module, Manage azure vm with powershell, Azure Powershell, Powershell Module for Azure
Fırat