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

image