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


一,引言

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

至於他提到的利用 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“

輸入創建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 就不用我多說了

OS disk type 選擇:”Standard HDD“

點擊 ”Next:Networking >“

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

點擊 ”Review + create“

等待驗證完成后,點擊 ”Create“

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

選擇 ”Operation=》Auto-shundown“

Enabled 選擇:”On“

Scheduled shutdown :“7:15:00 PM”

Time zone 選擇:“UTC+8”

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

輸入完相關參數后,記得點擊 “Save” 進行保存

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

2,Azure Function App 華麗登場

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

輸入相關參數

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 >“ 進入下一步操作

Storage Account 可以選擇默認的名稱

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

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

點擊 ”Review + create“

檢查參數沒有問題后,點擊 ”Create“ 創建 Azure Function App

創建完后,點擊跳轉到該資源,進行設置 Function App

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

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

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

回到剛剛創建好的VM,選擇 “Access control(IAM)”,點擊 “Add role to this resource” 添加角色指派

輸入相關參數

Role:“Owner”

Assign access to:“Function App”

Select:選擇我們創建的 Azure Function

點擊 “Save” 保存

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

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

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

Function template 選擇 ”Time trigger“(將按指定計划運行函數),點擊 ”Add“

添加完成后,跳轉到 Function 的開發這頁面,需要我們編寫具體的代碼

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

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

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

點擊 ”Save“ 保存

接下來點擊 ”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

保存后,我們可以嘗試測試代碼

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

19:15停止VM

23:20 手動觸發 TimeTrigger 啟動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 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM