Azure 基礎 : 使用 Automation 定時開機
不知何時 Azure 為虛機提供了自動關機的功能。這是一個很棒的功能,可以幫助我們定時關閉虛機並釋放掉資源以節省開支。如果某臺虛機在夜間不需要提供服務,我們就可以把它配置為晚上的某個時間點自動關機:
接下來讓人鬱悶的事情來了!在配置自動關機的時候我們沒有發現定時開機的相關配置!不僅如此,筆者在新建虛機的時候發現預設的設定中居然開啟了定時關機的功能:
到此為止筆者好像有些明白了,這一定又是套路!肯定是為了推廣某個服務而採取的不友好表現。
沒辦法,接下來只能靠自己了。最直接的方法就是寫一個 PowerShell 指令碼,在指令碼中登入 Azure,然後執行開機的命令。如果要每天定時開機,可以建立一個計劃任務定時執行 PowerShell 指令碼就可以了。
具體的實現請參考《Azure 基礎:用 PowerShell 自動登入》一文(只要把 demo 中重啟虛機的命令改為啟動命令就可以了)。但是這種方式有一個缺點:我們儲存在檔案中的登入資訊會過期。也就是說每隔一段時間都需要重新登入一遍並匯出新的登入資訊到檔案中。
既然不掏錢的方法有缺點,就讓我們看看 MS 推薦的解決方案(要收費的)。
MS 在雲端提供了的服務:Automation。所以我們可以透過 Automation 中提供的服務來實現定時開機的功能。
建立 Automation Account
要使用 Automation 進行自動化的工作,需要先新建一個 Automation 型別的服務,其實就是建立一個 Automation Account:
Automation Account 會管理很多的資源,其中最重要的是一些執行各種自動化任務的 runbook:
Azure 提供了多種型別的 runbook,使用者可以選擇自己喜歡的方式。這裡我們新建一個 PowerShell 型別的 runbook:
編輯重啟虛機的指令碼
建立了 PowerShell 型別的 runbook 後就可以編輯真正幹活的指令碼了,在 runbook 的編輯器中輸入下面的程式碼:
$connectionName = "AzureRunAsConnection"$rusultMessage = "The virtual machine started successfully."try{ # Get the connection "AzureRunAsConnection" $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName Add-AzureRmAccount ` -ServicePrincipal ` -TenantId $servicePrincipalConnection.TenantId ` -ApplicationId $servicePrincipalConnection.ApplicationId ` -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint Start-AzureRmVM -Name 'vm name' -ResourceGroupName 'resource group name'}catch { $rusultMessage = "The virtual machine failed to start." if (!$servicePrincipalConnection) { $ErrorMessage = "Connection $connectionName not found." throw $ErrorMessage } else{ Write-Error -Message $_.Exception throw $_.Exception }}finally { $Username ="sendgrid user name" $Password = ConvertTo-SecureString "your password" -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential $Username, $Password $SMTPServer = "smtp.sendgrid.net" $EmailFrom = "No-reply@cmteam.com" [string[]]$EmailTo = "Nick" $Subject = "start vm" $Body = $rusultMessage Send-MailMessage -smtpServer $SMTPServer ` -Credential $credential ` -Usessl ` -Port 587 ` -from $EmailFrom ` -to $EmailTo ` -subject $Subject ` -Body $Body ` -BodyAsHtml Write-Output "Email sent succesfully."}
首先,最好是透過異常處理結構處理指令碼執行中的異常。這裡只是簡單的把異常重新丟擲,最後它們會被顯示到執行的日誌中。
接下來的一個很重要的概念是 AutomationConnection。我們可以認為它包含了一些資訊可以用來連線需要操作的目標資源並提供相應的認證資訊。指令碼中使用的 AutomationConnection 名字為 AzureRunAsConnection,它是隨著 Automation Account 一起建立的。如果 AzureRunAsConnection 不能滿足需求,我們可以建立自定義的 AutomationConnection。
然後透過 Add-AzureRmAccount 命令使用 AzureRunAsConnection 提供的資訊進行登入從而獲得操作資源的許可權。
最後由 Start-AzureRmVM 命令執行啟動虛機的操作。
傳送郵件
為了 demo 的完整性,筆者透過 finally 結構強制在指令碼結束前給管理員傳送通知郵件。郵件透過 sendgrid 的伺服器進行傳送,報告啟動虛機的過程是否成功:
$Username ="azure_sendgrid user name@azure.com"$Password = ConvertTo-SecureString "your password" -AsPlainText -Force$credential = New-Object System.Management.Automation.PSCredential $Username, $Password$SMTPServer = "smtp.sendgrid.net"$EmailFrom = "No-reply@cmteam.com"[string[]]$EmailTo = "Nick"$Subject = "start vm"$Body = $rusultMessageSend-MailMessage -smtpServer $SMTPServer ` -Credential $credential ` -Usessl ` -Port 587 ` -from $EmailFrom ` -to $EmailTo ` -subject $Subject ` -Body $Body ` -BodyAsHtmlWrite-Output "Email sent succesfully."
測試指令碼的執行情況
在完成指令碼的編輯後點選 "Test pane" 進入指令碼測試介面,然後點選 "Start" 開始測試:
這個過程會執行你的指令碼,並輸出執行的日誌資訊。透過這種方式我們可以檢查指令碼的執行情況並對指令碼進行調整。
配置計劃任務
完成指令碼的測試後,在編輯介面點選 "Publish" 結束指令碼的編輯。然後為 runbook 新增一個計劃任務:
上面的配置會在每天早上 6 點鐘觸發指令碼的執行,也就是啟動我們指定的虛擬機器。
總結
這就 OK 了!是的,看起來還是比較繁瑣的。由於內部是透過 Azure 的認證機制完成許可權認證的,所以它能夠完美的解決我們在其它方案中碰到的登入認證問題。
另外,既然 Automation 服務是專門在雲端提供自動化功能的,那它自然應該具有很多拿的出手的能力,筆者後續會對 Azure Automation 做專門的介紹。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/855/viewspace-2800966/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 定時自動開啟和關閉Azure虛擬機器虛擬機
- Azure 基礎:File Storage
- Azure 基礎:Table storage
- Azure 基礎:Blob Storage
- Azure 基礎:Queue Storage
- Azure 基礎:使用 powershell 建立虛擬網路
- Azure Function 時區設定Function
- 【Azure Developer】Azure Automation 自動化賬號生成的時候怎麼生成連線 與證書 (Connection & Certificate)Developer
- 開機時的設定
- 【Go進階—基礎特性】定時器Go定時器
- java基礎的內部類定時Java
- 小米9 SE定時開關機怎麼設定?小米9 SE定時開機關機設定方法教程
- ESP8266_SDK開發基礎(3)硬體定時器定時器
- Azure 基礎:用 PowerShell 自動登入
- 計算機基礎第二課時計算機
- Azure Data Factory(九)基礎知識回顧
- Azure 基礎:用 PowerShell 自動釋出 CloudServicesCloud
- 03 . Vue基礎之計算屬性,元件基礎定義和使用Vue元件
- Spring基礎使用(三)-------XML定義AOP的使用SpringXML
- Json入門--基礎定義及使用JSON
- 使用Watin做Web UI Automation TestWebUI
- javascript基礎(定時器的應用)(四十三)JavaScript定時器
- javascript基礎(定時呼叫及其練習)(四十一)JavaScript
- Azure Terraform(五)利用Azure DevOps 實現自動化部署基礎資源ORMdev
- Azure 基礎:自定義 Table storage 查詢條件
- macOS自定義定時開關機教程Mac
- Linux設定開機等待時間Linux
- Spring Boot 2.x基礎教程:使用Elastic Job實現定時任務Spring BootAST
- AI數學基礎之:確定圖靈機和非確定圖靈機AI圖靈
- Pycharm 基礎設定PyCharm
- centos基礎設定CentOS
- win10設定每天定時開機方法_win10如何設定每天自動開機Win10
- 《前端運維》一、Linux基礎--10定時任務前端運維Linux
- django開發-定時任務的使用Django
- Azure DevOps(二)利用Azure DevOps Pipeline 構建基礎設施資源dev
- Azure Terraform(七)利用Azure DevOps 實現自動化部署基礎資源(補充)ORMdev
- 交換機基礎
- 使用Azure REST API建立虛擬機器RESTAPI虛擬機