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 Developer】Azure Automation 自動化賬號生成的時候怎麼生成連線 與證書 (Connection & Certificate)Developer
- Azure Function 時區設定Function
- 【Go進階—基礎特性】定時器Go定時器
- ESP8266_SDK開發基礎(3)硬體定時器定時器
- 開機時的設定
- 小米9 SE定時開關機怎麼設定?小米9 SE定時開機關機設定方法教程
- Spring基礎使用(三)-------XML定義AOP的使用SpringXML
- Azure DevOps(二)利用Azure DevOps Pipeline 構建基礎設施資源dev
- Spring Boot 2.x基礎教程:使用Elastic Job實現定時任務Spring BootAST
- 03 . Vue基礎之計算屬性,元件基礎定義和使用Vue元件
- Azure Data Factory(九)基礎知識回顧
- Azure Terraform(五)利用Azure DevOps 實現自動化部署基礎資源ORMdev
- 《前端運維》一、Linux基礎--10定時任務前端運維Linux
- AI數學基礎之:確定圖靈機和非確定圖靈機AI圖靈
- centos基礎設定CentOS
- Pycharm 基礎設定PyCharm
- macOS自定義定時開關機教程Mac
- Azure Terraform(七)利用Azure DevOps 實現自動化部署基礎資源(補充)ORMdev
- 機器學習開發流程基礎機器學習
- django開發-定時任務的使用Django
- win10設定每天定時開機方法_win10如何設定每天自動開機Win10
- Azure Terraform(十一)Azure DevOps Pipeline 內的動態臨時變數的使用ORMdev變數
- 【PYTHON】語法基礎 | 開始使用PythonPython
- 如何使用 SAP Intelligent Robotic Process Automation 自動操作 ExcelIntelExcel
- React基礎-定義元件React元件
- 【Azure 環境】【Azure Developer】使用Python程式碼獲取Azure 中的資源的Metrics定義及資料DeveloperPython
- C語言基礎-2、函式的定義與使用C語言函式
- Python基礎入門(5)- 函式的定義與使用Python函式
- 『動善時』JMeter基礎 — 6、使用JMeter傳送一個最基礎的請求JMeter
- 測試基礎(四)Jmeter基礎使用JMeter
- javaSE基礎:extdens與implements同時使用的測試Java
- 使用SQL4Automation讓CodeSYS連線資料庫SQL資料庫
- jqGrid 基礎使用
- Git基礎使用Git
- Codesys使用基礎
- WebRTC基礎使用Web
- Anaconda基礎使用
- mysql基礎使用MySql