Microsoft Azure: AzureVM wakeup/shutdown script
Azure ist auch an mir nicht vorbei gegangen. Mittlerweile betreibe ich einen guten Teil meiner Demo-Umgebungen in Microsofts Cloud und teste dort viele Dinge aus. Völlig unkompliziert.
Der große Vorteil dabei ist, dass ich nur bezahlen muss was ich nutze. Dank MSDN Account gibt Microsoft mir 75 Euro im Monat zum “verprassen” in Azure 😉
Da das Guthaben schnell aufgebraucht ist, wollte ich meine Maschinen nur laufen lassen, wenn ich sie brauche.
Bei einem Shutdown der Maschine über das Azure Portal werden die reservierten Ressourcen auf der Hardware wieder freigegeben. Die VM kostet dann nur noch die Storagebereitstellung, da keine Compute Ressourcen mehr verbraucht werden.
Also habe ich mir ein kleines und simples Powershellskript geschrieben. Über Nacht brauche ich meine Demoumgebung nicht. Somit kann ich die Ressourcen freigeben und mein Guthaben sparen. Hier kommt das Skript zum Einsatz. Morgens fahre ich die Maschinen mit gleichem Skript wieder hoch.
Voraussetzung ist, dass das Azure Powershell Modul installiert wurde. Hier nachzulesen: http://azure.microsoft.com/de-de/documentation/articles/install-configure-powershell/
Das Skript, dass ich aktuell benutze:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
Import-Module azure #azure module has to be installed Add-AzureAccount #prompt for your azure credentials # #next we choose our operation #this could be improved with "stop VM but stay provisioned" or "stopp all/ start all" operation # $Ops = @( "Start VM(s)" ; "Stop VM(s)" ) #with -passthrough parameter we could select a row (or rows, just hold crtl) and pass that object to the pipeline $Op = $Ops | out-gridview -Title "Select Operation" -PassThru #simple if/else "what we choose" statement if ( $Op -eq "Start VM(s)" ) { #we query all vms with specific status and pass them to gridview to make them selectable and pass selected object to our start/stop operation $VMs = Get-AzureVM | where { $_ .Status -ne "ReadyRole" } | select Name, ServiceName, Status $VM = $VMs | Out-GridView -Title "Azure VMs" -PassThru $VM | Start-AzureVM write-output "Starting VM(s)" } elseif ( $op -eq "Stop VM(s)" ) { $VMs = Get-AzureVM | where { $_ .Status -ne "StoppedDeallocated" } | select Name, ServiceName, Status $VM = $VMs | Out-GridView -Title "Azure VMs" -PassThru $VM | Stop-AzureVM write-output "Stopping VM(s)" } else { Write-Output "something went wrong" } Get-AzureVM | select Name, ServiceName, Status | Out-GridView -Title "Azure VMs" -Wait |
Ich hab mir dazu eine Verknüpfung
“powershell.exe -executionpolicy bypass -file “[scriptpath]”
auf den Desktop gelegt. Diese führe ich aus, nachdem der Rechner hochgefahren ist oder bevor ich den Feierabend einläute.
Es gibt noch viele Verbesserungsmöglichkeiten: Weitere Operationen wie “shutdown all vms” oder die Abfrage der Subscriptions (ich habe nur eine aktive Subscription). Auch die Fehlerbehandlung existiert aktuell nicht 😉
Mir hilft das Skript meine Kosten in Azure niedrig zu halten und etwas Zeit zu sparen.