您好,登錄后才能下訂單哦!
這是本博客第一篇技術相關的小貼士,在這里我不會詳細介紹所涉及的技術組件的具體使用細節,因為我相信這些大家都可以通過官方文檔了解到。如果你是一個看了官方文檔依然一臉茫然的IT小白,個人建議是先從基礎重新學起再來看具體的需求和方案。
在這片文章里我們會涉及到兩個概念,一個是Azure automation,另外就是resource的tag。
Tag這個我就不多說了,絕大多數系統或者平臺都會帶有的Key-value標識功能。
Automation的話,至少要了解runbook, job, schedule 這幾個基本的概念才能繼續往下看。
需求:為了避免不必要的資源浪費,許多測試開發環境可以在非工作時間進行關機來達到節約成本的目的。
如果貴公司錢多的燒不完,則可以自豪的忽略這個需求。
話不多說先貼上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. 首先這個runbook的目的就是遍歷你的賬號下所有訂閱下用有標簽Autoshutdown并且值為Yes的虛擬機,并檢測他們的powerstate, 如果不是 deallocated 狀態則執行stop-AzureRMVM 命令進行關機。標簽和值可以完全按照各自喜好自定義。
2. 此runbook需要關聯相對應的schedule才能按時執行,具體如何操作就不深入闡述了。
3. 此Automation的run as account不能expired, 同時必須要對對應的虛擬機擁有開關機的權限。RBAC中自定義role這塊我之后會有專門的文章介紹,這里就不深入闡述。
4. 這里用的是workflow,而不是普通的powershell腳本。最主要的優勢是可以做到并行操作。? ”ForEach -Parallel -ThrottleLimit 10“在這里就設置了最多同時進行10臺虛擬機的關機操作。當你的云平臺上有大量的虛擬機時,順序操作會消耗大量的腳本運行時間,一般來說一臺虛擬機的關機動作5到10分鐘不等,數量一大可能你的job就會超時。
5. 開機的runbook與關機類似,只是用到的是start-AzureRMVM命令。 另外在新的AzureRM.Compute 模塊中,stop-AzureRMVM會有需要人機交互進行確認,因此需要使用 -force 強制執行,這個小tip可以使用在任何其他的類似的powershell命令中。
其實這里涉及到了一些其他的知識點,有一些我會在其他的小貼士中詳細介紹。但是如果你只是想單純的讓這個功能跑起來,其實還是非常容易的。
對于一個IT從業人員,如果只是知其然也是可以混口飯吃的。但是一旦遇到高手依然會原形畢露,被別人鄙視一番也是自然。因此我們還是得知其所以然。
一般來說IT知識的掌握分為四個階段: User-->Know what--->troubleshooting--->Expert。 如果是技術相關崗位,至少也要在自己的專業領域達到Troubleshooting或者expert級別,而對其他的至少要做到know what。這里又涉及到了知識體系的搭建,在之后我也會分享一些相關的體會。
希望這篇文章可以對日常維護Azure 的朋友們有所啟發,如果有什么建議歡迎留言討論。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。