日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用 Azure Function 定时启动云 VM

發(fā)布時間:2023/12/4 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 Azure Function 定时启动云 VM 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點擊上方藍字關注“汪宇杰博客”

導語

微軟 Azure 平臺的 VM 可以做到定時自動關機,然而只有 DevTest Lab 服務中的 VM 能夠定時開機,普通用途的 VM 還沒有上線這個功能。但是沒關系,我們可以曲線救國,通過最新版的 Azure Function V3 及 PowerShell Core,分分鐘讓 VM 定時開機。

思路

6年前,我曾經(jīng)在博客里分享過如何使用 PowerShell 定時開關機 VM,方法是額外新建一臺 VM,在上面用計劃任務定時跑開關機的腳本去操作目標 VM。這個方法雖然可行,但需要耗費額外的 VM 資源,并且很 996。

https://edi.wang/post/2014/8/25/start-stop-azure-vm-on-schedule

而如今,Azure 已經(jīng)發(fā)生了翻天覆地的變化,Serverless 的 Azure Function 是如今最地道的玩法。Azure Function 可以通過多種 Trigger 觸發(fā)自定義的代碼邏輯,其中有一種就是 Timer,于是通過騷操作,Azure Function 也能夠做到定時開關機 VM。

創(chuàng)建 Function App

點擊 Create a resource,選擇 Function App。起一個好聽的名字,比如 start996

Runtime stack 的意思是該 Function 想用哪種語言編寫。Azure Function 提供了主流語言或平臺的支持。其中 .NET 據(jù)說工資低所以不考慮,Java 又容易脫發(fā),也不考慮,Node.js 和 Python 由于年過 30 學不動了,于是我只能選擇 Powershell Core,聽說它是跨平臺的,現(xiàn)在我們只能選到 6,實際上最新版已經(jīng)是 7.1 了,不知為何微軟還不給自家平臺部署最新版。

接下來我們得創(chuàng)建或選擇一個存儲賬戶(Storage Account),這是最新版 Azure Function V3 強制規(guī)定的,不許拒絕。

Plan type 選擇 Consumption (Serverless),這個 Plan 可以根據(jù)你的使用量情況動態(tài)計費,從而在用量小的時候幫助省錢。

然而我驚喜地發(fā)現(xiàn),說好跨平臺的 PowerShell Core,怎么只能選 Windows 呢?還好我是個 Windows 粉,用就用吧。

Application Insights 可以用來監(jiān)控 Function 的運行健康狀況,也能在編寫 Function 的時候用作控制臺輸出的捕獲,開不開都行,不開省錢,開了省頭發(fā)。

創(chuàng)建完成后,我們需要給這個 Function App 配置訪問 VM 的權(quán)限。

Identity 菜單下,打開 System assigned 開關。這種授權(quán)方式可以點點鼠標就讓 Azure 資源之間互相授權(quán),而不用自己寫代碼對接各種 Key 什么的導致996。

然后轉(zhuǎn)到需要被操作的 VM 頁面,在 Access control (IAM) 中選擇 Add a role assignment

在 Assign access to 選項中選擇 Function App,然后找到剛才創(chuàng)建的 Function App,添加為 Owner。但需要注意的是,Owner 由于權(quán)限最大,并不是最佳實踐,真正企業(yè)場景里請根據(jù)公司安全規(guī)范選擇合適的權(quán)限,以免被人改Function 代碼刪 VM 跑路。

編寫 Function 邏輯

在 Function App 創(chuàng)建完成后,點擊進入 Functions,然后點擊 Add,創(chuàng)建一個 Function,用于執(zhí)行定時開機的邏輯。

選擇 Timer Trigger

輸入 Function 的名字,比如 FubaoTrigger,然后在 Schedule 中輸入定時邏輯的表達式。

這個表達式使用 CRON 格式,拿 996 為例,周一到周六,每天早上9點的 CRON 為:0 0 9 * * 1-6

但要注意,這個時間為 UTC 時間。如果你需要更改時區(qū),需要在 Function App 的 Configuration 中添加一個 WEBSITE_TIME_ZONE 的值,如中國大陸時區(qū)可配置為 China Standard Time,具體做法請查考文末微軟文檔鏈接。

創(chuàng)建完成后,進入 Code + Test,把里面的代碼刪掉跑路,替換為:

# Input bindings are passed in via param block.

param($Timer)

$subscriptionId = "你的訂閱ID"

$tenantId = "你AAD的租戶ID"

$rsgName = "目標VM的資源組名稱"

$vmName = "目標VM的名稱"

Select-AzSubscription -SubscriptionID $subscriptionId -TenantID $tenantId

Start-AzVM -ResourceGroupName $rsgName -Name $vmName

其中 tenantId 可到 Azure Active Directoy 里找到。

腳本中的 param($Timer) 雖然代碼邏輯里用不到,但不能刪除,這是 Timer Trigger 必須的參數(shù),一刪就爆。

Select-AzSubscriptionStart-AzVM 并不是 PowerShell 自帶的模塊,而是 Azure PowerShell 的模塊,由于 Function 的 Host 上已經(jīng)安裝了 Azure PowerShell,所以此處才能直接使用。

保存代碼后,點擊 Test / Run,測試一下 Function 是否正常工作。

如果不出問題,我們就能看到目標 VM 從關機狀態(tài)自動啟動。

至此,這個 Azure Function 就可以在周一到周六,每天早上 9 點,準時啟動 VM 了!至于定時關機,由于太簡單不多介紹了,直接在 VM 的管理菜單里能找到。

參考:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer?tabs=csharp?

汪宇杰博客

.NET | Azure |?微軟MVP

長按二維碼獲取我的最新技術分享

喜歡本篇內(nèi)容請點個在看

總結(jié)

以上是生活随笔為你收集整理的使用 Azure Function 定时启动云 VM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。