一,引言
最近看到一位小兄弟在為了做 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
版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。