Windows Azure – Virtuální počítače a PowerShell

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:

image

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.

Import souboru s Azure Subscriptions

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

Azure Subscriptions

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.

Parametry našeho VM počítače

# 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.

Vytvoření 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í.

RDP

Ř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

Nastavení přístupu přes PowerShell

# Jelikoz je nas cilovy pocitac zatim v pracovni skupine, musime jeste nastavit polozku v TrustedHosts na WinRM
# Pridame jeden zaznam (musime spustit jako administratori)
# Parametrem Concatenate pouze hodnotu pridame a neprepiseme existujici polozky
Set-Item WSMan:\localhost\Client\TrustedHosts -Value 'MakovecPS03.cloudapp.net' -Concatenate

# 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ěží:

image

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:

image

Vytvoření a publikování „aplikace“ ve VM

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 'https://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 'https://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 https://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.

image 

David Moravec, MVP, Mainstream Technologies