Azure省錢大作戰 - 排程讓Azure把虛擬機關機及調較VM大小

Azure省錢大作戰 - 排程讓Azure把虛擬機關機及調較VM大小

上個月把自己的MSDN Azure帳號的$100美元玩完, 令到測試環境有好幾天不能開機
所以做了點動作令上面的VM在非上班時間排程關機, 這樣就省下最少60%成本,
這篇文章雖然要打一點指令, 不過實在滿容易的, 但省下的錢用來買個紅米也不錯吧! 戴太陽眼鏡
另一個角度來說就是能開更多的VM來測試了, 而我是使用Azure Powershell來達成這個目的的
要使用Azure Powershell, 你先要安裝Azure的Powershell套件
http://msdn.microsoft.com/en-us/library/jj156055.aspx
下載後, 開啟專屬的Windows Azure Powershell
而其實Powershell 3.0是可以自動在使用某些Add-On套件時自動Import所屬模組的
image
第一個指令我們要打 Get-AzurePublishSettingFile
鍵入後IE會自動開啟, 我們要登入Azure讓它把設定下載回來
IE會要求儲存一個xxxxx.publishsettings檔案
image
及後我們鍵入
Import-AzurePublishSettingsFile –PublishSettingsFile ‘File Path.publishsettings’
結果會如下顯示出你的帳號資料, 就等於電腦已經能以你的帳號連接Azure了
image
你可以試試鍵入 Get-AzureVM 來看看見不見到你建立的VM
image

如果要把某台VM關機, 指令是

Stop-AzureVM –ServiceName Servicename –Name VMname –Force

如果不打-Force 在關掉Provision Group最後一台VM時會出現錯誤而停止

指令會一直執行到工作完結, 再次查看 Get-AzureVM知道APP02已經關機了

image

 

測試好指令運作無誤, 我們就可以把它排程進行來省錢嚕

開啟Task Scheduler, 建立新工作

image

給這個工作一個名稱, 我試試把另一台VM關機

image

轉Trigger頁, 選擇每天(Daily)執行, 時間就自己決定了

image

到Actions頁, 動作是Start a Program, 把我們剛剛進行過的指令拆成兩部份, 而這次我會把另一台VM關機

Program是Powershell.exe , 而Arguments就是–File “Powershell script file path”

Start in 在Windows Server 2012上是 C:\Windows\SysWOW64\WindowsPowerShell\v1.0 (請自行確認)

image

按確認, 應該顯示類似這樣的畫面, 再按確認

我有試過在Arguement裡直接跑Powershell命令, 但得來的結果不太穩定, 放入.ps1裡跑成功率好像高很多

image

試跑一次, 右擊工作, 選RUN

image

待工作完成, 我們又試打一下Get-AzureVM, 確認排程工作順利完成我們預期效果

image

 

能把VM關機, 下一步我們要試試如果把VM開機, 而指令是

Start-AzureVM –ServiceName servicename –Name VMName

跟停機的指令非常類似

image

進階一點點, 假如我們要把所有帳號內已經停止的VM一次過開機, 可以這樣

Get-AzureVM | Where-Object {$_.Status –eq “StoppedDeallocated”} | Start-AzureVM

先以Get-AzureVM找出所有VM, 找出所有狀況為停止的VM, 再把它們傳遞給Start-AzureVM來開機

image

 

如果我們要把全部VM關機, 那情況也差不多, 不過最後的指令轉變為Stop-AzureVM, 而且找的是ReadyRole, 即開機中的VM

Get-AzureVM | Where-Object {$_.Status –eq “ReadyRole”} | Stop-AzureVM–Force

image

 

這樣下來每天交級電腦排程來開機關機, 就可以把運行Azure的成本降低很多了

不過或許某些VM並不能真的關機, 要一直運作, 但我們又想省錢,

那我們先看看Azure的VM基本收費表, 每一級的運作成本可以相差好遠啊

例如Extra Small跟Small 就是USD 0.074 / 0.018, 是4倍價錢, 所以我們要設法在非繁忙時間把VM變得小一些

image

以APP02做例子, 原本它是一台Small級數的VM

image

要改變它的大小, 首先我們要確認VM已經停機了, 這個我們已經學過怎樣做

再來改變VM大小 (例如變成Extra Small的話) 的指令是

Get-AzureVM –ServiceName servicename –Name VMname | Set-AzureVMSize “size”| Update-AzureVM

它會進行直到指令結束

image

完成後再次檢查, 它已經變成特小級的VM了, 把他開機, 在非繁忙時間就幫我節省75%成本了!

image