溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何利用Azure Automation以及Tag自動(dòng)開關(guān)Azure VM

發(fā)布時(shí)間:2020-06-12 07:58:11 來源:網(wǎng)絡(luò) 閱讀:290 作者:雷萌德 欄目:云計(jì)算

這是本博客第一篇技術(shù)相關(guān)的小貼士,在這里我不會(huì)詳細(xì)介紹所涉及的技術(shù)組件的具體使用細(xì)節(jié),因?yàn)槲蚁嘈胚@些大家都可以通過官方文檔了解到。如果你是一個(gè)看了官方文檔依然一臉茫然的IT小白,個(gè)人建議是先從基礎(chǔ)重新學(xué)起再來看具體的需求和方案。


在這片文章里我們會(huì)涉及到兩個(gè)概念,一個(gè)是Azure automation,另外就是resource的tag。


Tag這個(gè)我就不多說了,絕大多數(shù)系統(tǒng)或者平臺(tái)都會(huì)帶有的Key-value標(biāo)識(shí)功能。

Automation的話,至少要了解runbook, job, schedule 這幾個(gè)基本的概念才能繼續(xù)往下看。



需求:為了避免不必要的資源浪費(fèi),許多測(cè)試開發(fā)環(huán)境可以在非工作時(shí)間進(jìn)行關(guān)機(jī)來達(dá)到節(jié)約成本的目的。

如果貴公司錢多的燒不完,則可以自豪的忽略這個(gè)需求。

話不多說先貼上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 ($sub in $subs)


{



??? Select-AzureRmSubscription -SubscriptionId $sub.SubscriptionId -ErrorAction Continue


??? $VMs = Get-AzureRmVm -status| Where-Object {$_.Tags.Keys -eq "AutoShutdown" -and $_.Tags.Values -eq "Yes" }



? ForEach -Parallel -ThrottleLimit 10 ($VM in $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 }


? }



}


}


---------------------------------------------------


具體說明:

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ī)擁有開關(guān)機(jī)的權(quán)限。RBAC中自定義role這塊我之后會(huì)有專門的文章介紹,這里就不深入闡述。

4. 這里用的是workflow,而不是普通的powershell腳本。最主要的優(yōu)勢(shì)是可以做到并行操作。? ”ForEach -Parallel -ThrottleLimit 10“在這里就設(shè)置了最多同時(shí)進(jìn)行10臺(tái)虛擬機(jī)的關(guān)機(jī)操作。當(dāng)你的云平臺(tái)上有大量的虛擬機(jī)時(shí),順序操作會(huì)消耗大量的腳本運(yùn)行時(shí)間,一般來說一臺(tái)虛擬機(jī)的關(guān)機(jī)動(dòng)作5到10分鐘不等,數(shù)量一大可能你的job就會(huì)超時(shí)。

5. 開機(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è)功能跑起來,其實(shí)還是非常容易的。


對(duì)于一個(gè)IT從業(yè)人員,如果只是知其然也是可以混口飯吃的。但是一旦遇到高手依然會(huì)原形畢露,被別人鄙視一番也是自然。因此我們還是得知其所以然。

一般來說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ā),如果有什么建議歡迎留言討論。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI