另類的曲線方式定時Start up/Shut down VM 的解決方案

Grant_Allen發表於2021-04-30

一,引言

     最近看到一位小兄弟在為了做 Azure 雲虛擬機器的自動關機開啟 在群裡求助,最後也不知道結果咋樣了。

另類的曲線方式定時Start up/Shut down VM 的解決方案

另類的曲線方式定時Start up/Shut down VM 的解決方案

至於他提到的利用 Automation Account 我是沒有接觸過,並且也沒有看資料學習,所以不知道怎麼使用 Automation Account 做到定時的開關機。但是值得慶幸是的,我會一些 PoerShell 指令碼,知道 PowerShell 可以做到利用指令碼開關機;並且在前一段時間稍微熟悉了 Azure Function App,知道 Azure Function App 的模板中是有 TimeTrigger。一個可做到開關機,一個可做到定時執行作業。奇怪的組合就這樣誕生了。今天我們就額外為這位網友分享一篇另類的解決方案。Let's go

二,正文

1,不可缺少的主角----- Azure virtual machine

登陸到 Azure Portal 上之後,點選 “Create a resource“,選擇 ”Compute“,點選建立 ”Virtual machine“

另類的曲線方式定時Start up/Shut down VM 的解決方案

輸入建立VM時,必要的引數

Resource group:”Web_Test_VM_RG“

Virtual machine name:‘cnbateblog-vm”

Region:“East Asia”

Availability options:’No infrastructure redundancy required“

Images:”Windows Server 2012 R2 Datacenter - Gen1“

Size:”根據自己的實際情況選擇合適的型別“

Username:”cnbateblogwebvm01“

Password 和 Confirm password 就不用我多說了

另類的曲線方式定時Start up/Shut down VM 的解決方案

OS disk type 選擇:”Standard HDD“

點選 ”Next:Networking >“

另類的曲線方式定時Start up/Shut down VM 的解決方案

修改Public IP :”Basic“ && "Static"(主要是為了不想虛擬機器在重啟之後,Public IP 老是在變化)

點選 ”Review + create“

另類的曲線方式定時Start up/Shut down VM 的解決方案

等待驗證完成後,點選 ”Create“

另類的曲線方式定時Start up/Shut down VM 的解決方案

等待建立完成後,點選 ”go to resource“ 跳轉到 ”cnbateblog-vm“ 這臺機器。我們可以看到微軟其實已經給提供了 ”Auto-shundown“(定時關機)的功能了,我們只需要簡單的操作一番就可以實現了

選擇 ”Operation=》Auto-shundown“

Enabled 選擇:”On“

Scheduled shutdown :“7:15:00 PM”

Time zone 選擇:“UTC+8”

郵件的傳送,大家可以自行選擇是否需要

輸入完相關引數後,記得點選 “Save” 進行儲存

另類的曲線方式定時Start up/Shut down VM 的解決方案

做完這些操作後,我們的重頭戲來了 Azure Function App

2,Azure Function App 華麗登場

繼續回到 Azure Portal 首頁,點選 “Create a resource”,建立 Function App

另類的曲線方式定時Start up/Shut down VM 的解決方案

輸入相關引數

Resource Group:”Web_Test_Function_RG“

Function App name:”cnbateblogvm-autostartup“

Publish:”Code“

Runtime stack:”PowerShell Code“

Version:”7.0“

Region:”East Asia“

點選 ”Next:Hosting >“ 進入下一步操作

另類的曲線方式定時Start up/Shut down VM 的解決方案

Storage Account 可以選擇預設的名稱

這裡我自己修改了這個 Storage account 為 ”vmautostartstorage“

關於 ”Monitoring“ 也可以根據實際需求設定是否開啟

點選 ”Review + create“

另類的曲線方式定時Start up/Shut down VM 的解決方案

檢查引數沒有問題後,點選 ”Create“ 建立 Azure Function App

另類的曲線方式定時Start up/Shut down VM 的解決方案

建立完後,點選跳轉到該資源,進行設定 Function App

首先我們需要設定開啟 Function App 的  Identity(標識)

選擇 ”Settings=》Identity“,點選 ”Status=》On“,完事記得點選 ”Save“ 儲存操作

另類的曲線方式定時Start up/Shut down VM 的解決方案

同時Azure Function App 需要訪問控制 Azure VM 

回到剛剛建立好的VM,選擇 “Access control(IAM)”,點選 “Add role to this resource” 新增角色指派

另類的曲線方式定時Start up/Shut down VM 的解決方案

輸入相關引數

Role:“Owner”

Assign access to:“Function App”

Select:選擇我們建立的 Azure Function

點選 “Save” 儲存

另類的曲線方式定時Start up/Shut down VM 的解決方案

並且,我們可以在 Access control(IAM)中看到剛剛新增好的角色分配

另類的曲線方式定時Start up/Shut down VM 的解決方案

又回到剛剛建立好的Azure Function App 中,接下來需要建立自動啟動虛擬機器的程式碼,

選擇 ” Functions =》Function“,點選 ”+Add“

另類的曲線方式定時Start up/Shut down VM 的解決方案

Function template 選擇 ”Time trigger“(將按指定計劃執行函式),點選 ”Add“

另類的曲線方式定時Start up/Shut down VM 的解決方案

新增完成後,跳轉到 Function 的開發這頁面,需要我們編寫具體的程式碼

選擇 ” Developer =》Intergration“ ,點選 ”計時器(Timer)“

Schedule(計劃):”0 0 10 * * *“(每天UTC 時間 上午10點執行,中國時區 也就是下午18點整)為了演示,等下會手動觸發

記得時間戳引數名稱 ”Time“ 等下會使用到

點選 ”Save“ 儲存

另類的曲線方式定時Start up/Shut down VM 的解決方案

接下來點選 ”Code + Test“ 編寫 PowerShell 程式碼

需要注意的是,中間有兩行 “Install-Module,Import-Module” 意思是 “安裝、匯入 PowerShell 庫中需要的 PowerShellGet 模組”

如果在測試執行 Azure Function App 出現 “The term 'Get-AzSubscription' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again” 那麼就得加上註冊、匯入 PowerShellGet 模組 的命令,當測試執行成功後,再註釋掉就可以了。

# Input bindings are passed in via param block.
param($Timer)

$subscription_Id = "Your Subscription_Id "
$tenant_Id = "Your Tenant Id "
$Resource_Name = "Web_Test_VM_RG"
$VM_Name = "cnbateblog-vm"

#Install-Module
#Import-Module

Select-AzSubscription -SubscriptionID $subscription_Id -TenantID $tenant_Id
Start-AzVM -ResourceGroupName $Resource_Name -Name $VM_Name

儲存後,我們可以嘗試測試程式碼

另類的曲線方式定時Start up/Shut down VM 的解決方案

我們可以從 VM 的活動日誌中看到當前VM的狀態的變化

19:15停止VM

另類的曲線方式定時Start up/Shut down VM 的解決方案

23:20 手動觸發 TimeTrigger 啟動VM

另類的曲線方式定時Start up/Shut down VM 的解決方案

Bingo!!!!!完成。大家可以自行嘗試操作一下?‍♂️?‍♂️?‍♂️?‍♂️?‍♂️

三,結尾

     文中有用到 “安裝、匯入 PowerShell 庫中需要的 PowerShellGet 模組”,接下來我也會再學習分享的,並且定時開/關 VM 還有其他方式,如文章開始這位小兄弟提到的 Automation Account。期待下一篇分享來自 Automation Account 的分享內容

參考連結:Working with the new Azure PowerShell Az moduleUse Azure Function to Schedule Auto Start for VMs

文章來自博主本人自己的部落格:https://allenmasters.com/post/2021/4/29/start-upshut-down-vm-

歡迎大家關注博主的部落格:https://allenmasters.com/

作者:Allen 

版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。

相關文章