一,引言
最近看到一位小兄弟在為了做 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 module,Use Azure Function to Schedule Auto Start for VMs
文章來自博主本人自己的博客:https://allenmasters.com/post/2021/4/29/start-upshut-down-vm-
歡迎大家關注博主的博客:https://allenmasters.com/
作者:Allen
版權:轉載請在文章明顯位置注明作者及出處。如發現錯誤,歡迎批評指正。