S ohlášením General Availability (GA) podpory virtuálních počítačů (jako součást IaaS) Microsoft přidal zajímavou možnost zakomponovanou přímo do vytváření virtuálních strojů (VM).
Při vytváření VM v portálu můžete zaškrtnout možnost aktivovat vzdálený přístup přes PowerShell:
Při vytváření VM přes PowerShell je tato možnost standardně zapnuta. Tím se nám otevírá svět virtuálních počítačů bez potřeby připojování přes RDP. Jak na vytvoření VM bez nutnosti přihlašovat se k portálu nebo k RDP si ukážeme na komentovaném skriptu níže.
Tuto operaci stačí provést pouze jednou. Informace jsou poté již načtené ve vašem profilu a soubor již nemusíte stahovat/importovat:
# Stazeni Azure Publish Settings File z portalu Windows Azure
# Ulozeni do lokalni slozky
Get-AzurePublishSettingsFile
# Import stazeneho souboru do session PowerShellu
Import-AzurePublishSettingsFile -PublishSettingsFile C:\temp\apsfile.publishsettings
Nyní se podíváme, jaké máme subscriptions a zkontrolujeme i Storage Account.
# Podivame se, jake mame Azure subscriptions
Get-AzureSubscription | Format-Table -Property SubscriptionName, IsDefault -AutoSize
# Podivame se na seznam Storage Accounts
Get-AzureStorageAccount | Format-Table -Property StorageAccountName, Location, OperationStatus, StorageAccountDescription
# Vybereme subscription, se kterym chceme pracovat
Set-AzureSubscription -SubscriptionName '3-Month Free Trial' -CurrentStorageAccount 'portalvhdsjkw92xfdrv8k5'
Posledním příkazem říkáme, kde budeme budoucí VM vytvářet.
# Vybereme si VHD soubor, ktery pouzijeme pro tvorbu naseho noveho VM pocitace
Get-AzureVMImage | Where ImageName -Like '*Windows*' | Select ImageName
# Pro jednoduchost si jeho jmeno ulozime do promenne
$image = 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-201305.01-en.us-127GB.vhd'
# VM muzeme instalovat do ruznych lokaci
Get-AzureLocation
# Vybereme tedy tu nejblizsi a opet ulozime do promenne
$loc = 'West Europe'
#Get-AzureService
# Pro jednoduchost pouzijeme New-AzureQuickVM cmdlet, meli bychom specifikovat nasledujici parametry
# Vyuzijeme techniku 'splatting' pro prehlednejsi definici parametru
$prop = @{
Windows = $true
ServiceName = 'MakovecPS03'
Name = 'MakovecPS03'
ImageName = $image
Location = $loc
AdminUserName = 'Makovec'
Password = 'Pa$$w0rd'
InstanceSize = 'ExtraSmall'
}
Nyní máme definovány potřebné parametry a můžeme začít s vytvářením VM.
# Pokud bychom chteli modifikovat PowerShell podporu, muzeme pouzit nasledujici parametry:
# DisableWinRMHttps - vypne pristup do WinRM pres HTTPS
# EnableWinRMHttp - zapne pristup do WinRM pres HTTP, standarne se nezapina, protoze je tento pristup mene bezpecny
New-AzureQuickVM @prop -Verbose -EnableWinRMHttp
# V tuto chvili se vytvari VM v Azure, po skonceni se spusti
# Vystup v konzoli:
# OperationDescription OperationId OperationStatus
# -------------------- ----------- ---------------
# New-AzureQuickVM - Create Cloud Service e941396c-77fa-4fd7-b7c1-5d040435852e Succeeded
# New-AzureQuickVM - Create Deployment with VM Makov... 69777cac-9706-4f5b-83ca-d54846d83c4d Succeeded
# Zjistime si aktualni stav tvorby VM
Get-AzureVM -ServiceName MakovecPS03 -Name MakovecPS03 | Format-Table InstanceName, ServiceName, PowerState, InstanceStatus
# Standardne se otevrene porty mapuji na nahodne porty, pro jednoduchost je mozne endpoint zmenit
# Jak mame porty nastavene po vytvoreni VM?
Get-AzureVM -ServiceName MakovecPS03 -Name MakovecPS03 | Get-AzureEndpoint | Format-Table -Property Name, Port, LocalPort, Protocol -AutoSize
# Vybereme dany VM pocitac
# Nastavime porty a zmenu ulozime zpet do AzureVM
Get-AzureVM -ServiceName MakovecPS03 -Name MakovecPS03 |
Set-AzureEndpoint -Name WinRmHTTPs -Protocol tcp -LocalPort 5986 -PublicPort 5986 |
Set-AzureEndpoint -Name RemoteDesktop -Protocol tcp -LocalPort 3389 -PublicPort 3389 |
Add-AzureEndpoint -Name WinRmHTTP -Protocol tcp -LocalPort 5985 -PublicPort 5985 |
Update-AzureVM
# Kontrola predchozi operace
Get-AzureVM -ServiceName MakovecPS03 -Name MakovecPS03 | Get-AzureEndpoint | Format-Table -Property Name, Port, LocalPort, Protocol -AutoSize
Již při vytváření jsme zvolili možnost nastavení PowerShell vzdáleného přístupu přes http. Jelikož nebudeme používat žádný certifikát, je pro nás volba s https v našem scénáři nepoužitelná. V reálném prostředí by to naopak bylo velmi vhodné řešení.
Řekli jsme si, že v našem scénáři nebudeme RDP používat. Pokud bychom ale chtěli mít možnost vzdálené plochy, můžeme si stáhnout potřebný RDP soubor na lokální počítač.
# Po skonceni deploymentu, se muzeme na pocitac pripojit nekolika zpusoby
# RDP - stahneme RDP soubor na lokalni pocitac a spustime jej
Get-AzureRemoteDesktopFile -Name MakovecPS03 -LocalPath c:\temp\test.rdp -ServiceName MakovecPS03
Invoke-Item -Path C:\temp\test.rdp
# A nyni se muzeme pripojit
# Ulozime si potrebne credentials
$cred = Get-Credential Makovec
# A pripojime se na vzdaleny pocitac
Enter-PSSession -ComputerName MakovecPS03.cloudapp.net -Credential $cred
# Voila
V portálu můžeme zkontrolovat, že počítač je vytvořen a běží:
Na našem lokálním počítači (ten, ze kterého jsme celý VM počítač vytvářeli) nastavíme položku TrustedHosts na hodnotu nově vytvořeného VM. Poté se již můžeme připojit, ihned vidíme, že se nám v PowerShellu změnil prompt:
Nyní máme vytvoření v Azure počítač a můžeme jej využít pro publikování naší služby. V našem scénáři se bude jednat o IIS server s užitečnými informacemi.
# Nyni posuneme nas novy pocitac o kousek dal
# Zkusime nainstalovat IIS a rozbehnout nasi skvelou aplikaci v cloudu
# Nejprve pridame HTTP port, abychom se na IIS dostali
# a vzhledem k tomu, ze vse budeme ovladat pres PowerShell, odstranime zaroven RDP port
Get-AzureVM -ServiceName MakovecPS03 -Name MakovecPS03 |
Add-AzureEndpoint -Name IIS -Protocol tcp -LocalPort 80 -PublicPort 80 |
Remove-AzureEndpoint -Name RemoteDesktop |
Update-AzureVM
# Vyzkousime pripojeni na IIS, nebude fungovat, protoze nemame nainstalovano
Invoke-WebRequest -Uri 'http://MakovecPS03.cloudapp.net' | Format-Table -Property StatusDescription, StatusCode
# Vytvorime si PSSession na nas Azure VM pocitac
$s = New-PSSession -ComputerName MakovecPS03.cloudapp.net -Credential $cred -Name AzureVM
# Kontrola, ze jsme na spravnem pocitaci
Invoke-Command -Session $s -ScriptBlock { $env:COMPUTERNAME }
# Kontrola IIS, instalace a dalsi kontrola
Invoke-Command -Session $s -ScriptBlock { Get-WindowsFeature -Name Web-Server | Where Installed }
Invoke-Command -Session $s -ScriptBlock { Install-WindowsFeature -Name Web-Server }
Invoke-Command -Session $s -ScriptBlock { Get-WindowsFeature -Name Web-Server | Where Installed }
# Opetovne overeni IIS pres Invoke-WebRequest
# Nyni uz dostavame status OK
Invoke-WebRequest -Uri 'http://MakovecPS03.cloudapp.net' | Format-Table -Property StatusDescription, StatusCode-AutoSize
# Vse funguje, muzeme nahrat nas obsah na web server
# Pouze modifikujeme defaultni iisstart.htm stranku
Invoke-Command -Session $s -ScriptBlock {
$c = Get-Content C:\inetpub\wwwroot\iisstart.htm
$c = $c -replace '<body>', '<body><hr><center>Vitejte v Azure IaaS!</center><hr>'
Set-Content C:\inetpub\wwwroot\iisstart.htm $c -Force
}
# A nyni uz si muzeme zobrazit nasi skvelou stranku v prohlizeci
Start-Process http://MakovecPS03.cloudapp.net
Finálním stavem je tedy stránka s informací, že jsme se připojili na Azure IaaS.
Ukázali jsme si, jak je možné velice jednoduchým a rychlým způsobem vytvořit virtuální počítač v Azure a na tento počítač nasadit potřebnou službu. Tento scénář je velmi vhodný pro různé testovací scénáře jak pro vývojáře, tak pro administrátory.