這是本博客第一篇技術(shù)相關(guān)的小貼士,在這里我不會(huì)詳細(xì)介紹所涉及的技術(shù)組件的具體使用細(xì)節(jié),因?yàn)槲蚁嘈胚@些大家都可以通過(guò)官方文檔了解到。如果你是一個(gè)看了官方文檔依然一臉茫然的IT小白,個(gè)人建議是先從基礎(chǔ)重新學(xué)起再來(lái)看具體的需求和方案。
創(chuàng)新互聯(lián)公司專注于萊陽(yáng)企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站定制開(kāi)發(fā)。萊陽(yáng)網(wǎng)站建設(shè)公司,為萊陽(yáng)等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
在這片文章里我們會(huì)涉及到兩個(gè)概念,一個(gè)是Azure automation,另外就是resource的tag。
Tag這個(gè)我就不多說(shuō)了,絕大多數(shù)系統(tǒng)或者平臺(tái)都會(huì)帶有的Key-value標(biāo)識(shí)功能。
Automation的話,至少要了解runbook, job, schedule 這幾個(gè)基本的概念才能繼續(xù)往下看。
需求:為了避免不必要的資源浪費(fèi),許多測(cè)試開(kāi)發(fā)環(huán)境可以在非工作時(shí)間進(jìn)行關(guān)機(jī)來(lái)達(dá)到節(jié)約成本的目的。
如果貴公司錢多的燒不完,則可以自豪的忽略這個(gè)需求。
話不多說(shuō)先貼上runbook供大家參考:
---------------------------------------------------
workflow Autoshutdown_by_tag
{
????$connectionName ="AzureRunAsConnection"
try
{
???$servicePrincipalConnection=Get-AutomationConnection -Name$connectionName
???"Logging in to Azure..."
??? Add-AzureRmAccount `
??????? -ServicePrincipal `
??????? -TenantId$servicePrincipalConnection.TenantId `
??????? -ApplicationId$servicePrincipalConnection.ApplicationId `
??????? -CertificateThumbprint$servicePrincipalConnection.CertificateThumbprint `
??????? -EnvironmentName AzureChinaCloud
}
catch {
???if (!$servicePrincipalConnection)
??? {
???????$ErrorMessage ="Connection$connectionName not found."
???????throw$ErrorMessage
??? }else{
??????? Write-Error -Message$_.Exception
???????throw$_.Exception
??? }
}
$subs = Get-AzureRmSubscription
Foreach ($subin$subs)
{
??? Select-AzureRmSubscription -SubscriptionId$sub.SubscriptionId -ErrorActionContinue
???$VMs = Get-AzureRmVm -status| Where-Object {$_.Tags.Keys -eq"AutoShutdown" -and$_.Tags.Values -eq"Yes" }
?ForEach -Parallel -ThrottleLimit10 ($VMin$VMs)
? {
?If ($vm.powerstate -eq"VM deallocated")
????? {Write-Output"$($VM.Name) is already shutdown"}
?else
?? {Write-Output"Stop:$($VM.Name)";Stop-AzureRMVM -Name$VM.Name -ResourceGroupName$VM.ResourceGroupName -force }
? }
}
}
---------------------------------------------------
具體說(shuō)明:
1. 首先這個(gè)runbook的目的就是遍歷你的賬號(hào)下所有訂閱下用有標(biāo)簽Autoshutdown并且值為Yes的虛擬機(jī),并檢測(cè)他們的powerstate, 如果不是 deallocated 狀態(tài)則執(zhí)行stop-AzureRMVM 命令進(jìn)行關(guān)機(jī)。標(biāo)簽和值可以完全按照各自喜好自定義。
2. 此runbook需要關(guān)聯(lián)相對(duì)應(yīng)的schedule才能按時(shí)執(zhí)行,具體如何操作就不深入闡述了。
3. 此Automation的run as account不能expired, 同時(shí)必須要對(duì)對(duì)應(yīng)的虛擬機(jī)擁有開(kāi)關(guān)機(jī)的權(quán)限。RBAC中自定義role這塊我之后會(huì)有專門的文章介紹,這里就不深入闡述。
4. 這里用的是workflow,而不是普通的powershell腳本。最主要的優(yōu)勢(shì)是可以做到并行操作。? ”ForEach -Parallel -ThrottleLimit10“在這里就設(shè)置了最多同時(shí)進(jìn)行10臺(tái)虛擬機(jī)的關(guān)機(jī)操作。當(dāng)你的云平臺(tái)上有大量的虛擬機(jī)時(shí),順序操作會(huì)消耗大量的腳本運(yùn)行時(shí)間,一般來(lái)說(shuō)一臺(tái)虛擬機(jī)的關(guān)機(jī)動(dòng)作5到10分鐘不等,數(shù)量一大可能你的job就會(huì)超時(shí)。
5. 開(kāi)機(jī)的runbook與關(guān)機(jī)類似,只是用到的是start-AzureRMVM命令。 另外在新的AzureRM.Compute 模塊中,stop-AzureRMVM會(huì)有需要人機(jī)交互進(jìn)行確認(rèn),因此需要使用 -force 強(qiáng)制執(zhí)行,這個(gè)小tip可以使用在任何其他的類似的powershell命令中。
其實(shí)這里涉及到了一些其他的知識(shí)點(diǎn),有一些我會(huì)在其他的小貼士中詳細(xì)介紹。但是如果你只是想單純的讓這個(gè)功能跑起來(lái),其實(shí)還是非常容易的。
對(duì)于一個(gè)IT從業(yè)人員,如果只是知其然也是可以混口飯吃的。但是一旦遇到高手依然會(huì)原形畢露,被別人鄙視一番也是自然。因此我們還是得知其所以然。
一般來(lái)說(shuō)IT知識(shí)的掌握分為四個(gè)階段: User-->Know what--->troubleshooting--->Expert。 如果是技術(shù)相關(guān)崗位,至少也要在自己的專業(yè)領(lǐng)域達(dá)到Troubleshooting或者expert級(jí)別,而對(duì)其他的至少要做到know what。這里又涉及到了知識(shí)體系的搭建,在之后我也會(huì)分享一些相關(guān)的體會(huì)。
希望這篇文章可以對(duì)日常維護(hù)Azure 的朋友們有所啟發(fā),如果有什么建議歡迎留言討論。